diff --git a/public/missiles/blessedhammerex.json b/public/missiles/blessedhammerex.json new file mode 100644 index 0000000..da0c5e9 --- /dev/null +++ b/public/missiles/blessedhammerex.json @@ -0,0 +1,811 @@ +{ + "name": "blessedhammerex", + "celFile": "blessedhammer", + "width": 512, + "height": 192, + "directions": 16, + "framesPerDirection": 6, + "animSpeed": 16, + "groups": [ + [ + [ + 0, + 0, + 27, + 38, + -13, + -56 + ], + [ + 28, + 0, + 27, + 38, + -13, + -56 + ], + [ + 56, + 0, + 27, + 38, + -13, + -56 + ], + [ + 84, + 0, + 27, + 38, + -13, + -56 + ], + [ + 112, + 0, + 27, + 38, + -13, + -56 + ], + [ + 140, + 0, + 27, + 38, + -13, + -56 + ] + ], + [ + [ + 168, + 0, + 26, + 33, + -13, + -53 + ], + [ + 195, + 0, + 26, + 33, + -13, + -53 + ], + [ + 222, + 0, + 26, + 33, + -13, + -53 + ], + [ + 249, + 0, + 26, + 33, + -13, + -53 + ], + [ + 276, + 0, + 26, + 33, + -13, + -53 + ], + [ + 303, + 0, + 26, + 33, + -13, + -53 + ] + ], + [ + [ + 330, + 0, + 27, + 33, + -14, + -54 + ], + [ + 358, + 0, + 27, + 33, + -14, + -54 + ], + [ + 386, + 0, + 27, + 33, + -14, + -54 + ], + [ + 414, + 0, + 27, + 33, + -14, + -54 + ], + [ + 442, + 0, + 27, + 33, + -14, + -54 + ], + [ + 470, + 0, + 27, + 33, + -14, + -54 + ] + ], + [ + [ + 0, + 39, + 27, + 38, + -13, + -56 + ], + [ + 28, + 39, + 27, + 38, + -13, + -56 + ], + [ + 56, + 39, + 27, + 38, + -13, + -56 + ], + [ + 84, + 39, + 27, + 38, + -13, + -56 + ], + [ + 112, + 39, + 27, + 38, + -13, + -56 + ], + [ + 140, + 39, + 27, + 38, + -13, + -56 + ] + ], + [ + [ + 168, + 39, + 7, + 38, + -3, + -56 + ], + [ + 176, + 39, + 7, + 38, + -3, + -56 + ], + [ + 184, + 39, + 7, + 38, + -3, + -56 + ], + [ + 192, + 39, + 7, + 38, + -3, + -56 + ], + [ + 200, + 39, + 7, + 38, + -3, + -56 + ], + [ + 208, + 39, + 7, + 38, + -3, + -56 + ] + ], + [ + [ + 216, + 39, + 36, + 35, + -18, + -54 + ], + [ + 253, + 39, + 36, + 35, + -18, + -54 + ], + [ + 290, + 39, + 36, + 35, + -18, + -54 + ], + [ + 327, + 39, + 36, + 35, + -18, + -54 + ], + [ + 364, + 39, + 36, + 35, + -18, + -54 + ], + [ + 401, + 39, + 36, + 35, + -18, + -54 + ] + ], + [ + [ + 438, + 39, + 7, + 32, + -4, + -53 + ], + [ + 446, + 39, + 7, + 32, + -4, + -53 + ], + [ + 454, + 39, + 7, + 32, + -4, + -53 + ], + [ + 462, + 39, + 7, + 32, + -4, + -53 + ], + [ + 470, + 39, + 7, + 32, + -4, + -53 + ], + [ + 478, + 39, + 7, + 32, + -4, + -53 + ] + ], + [ + [ + 0, + 78, + 36, + 35, + -18, + -55 + ], + [ + 37, + 78, + 36, + 35, + -18, + -55 + ], + [ + 74, + 78, + 36, + 35, + -18, + -55 + ], + [ + 111, + 78, + 36, + 35, + -18, + -55 + ], + [ + 148, + 78, + 36, + 35, + -18, + -55 + ], + [ + 185, + 78, + 36, + 35, + -18, + -55 + ] + ], + [ + [ + 222, + 78, + 16, + 38, + -8, + -56 + ], + [ + 239, + 78, + 16, + 38, + -8, + -56 + ], + [ + 256, + 78, + 16, + 38, + -8, + -56 + ], + [ + 273, + 78, + 16, + 38, + -8, + -56 + ], + [ + 290, + 78, + 16, + 38, + -8, + -56 + ], + [ + 307, + 78, + 16, + 38, + -8, + -56 + ] + ], + [ + [ + 324, + 78, + 34, + 36, + -17, + -55 + ], + [ + 359, + 78, + 34, + 36, + -17, + -55 + ], + [ + 394, + 78, + 34, + 36, + -17, + -55 + ], + [ + 429, + 78, + 34, + 36, + -17, + -55 + ], + [ + 464, + 78, + 34, + 36, + -17, + -55 + ], + [ + 0, + 117, + 34, + 36, + -17, + -55 + ] + ], + [ + [ + 35, + 117, + 34, + 34, + -17, + -54 + ], + [ + 70, + 117, + 34, + 34, + -17, + -54 + ], + [ + 105, + 117, + 34, + 34, + -17, + -54 + ], + [ + 140, + 117, + 34, + 34, + -17, + -54 + ], + [ + 175, + 117, + 34, + 34, + -17, + -54 + ], + [ + 210, + 117, + 34, + 34, + -17, + -54 + ] + ], + [ + [ + 245, + 117, + 16, + 32, + -8, + -53 + ], + [ + 262, + 117, + 16, + 32, + -8, + -53 + ], + [ + 279, + 117, + 16, + 32, + -8, + -53 + ], + [ + 296, + 117, + 16, + 32, + -8, + -53 + ], + [ + 313, + 117, + 16, + 32, + -8, + -53 + ], + [ + 330, + 117, + 16, + 32, + -8, + -53 + ] + ], + [ + [ + 347, + 117, + 16, + 32, + -9, + -53 + ], + [ + 364, + 117, + 16, + 32, + -9, + -53 + ], + [ + 381, + 117, + 16, + 32, + -9, + -53 + ], + [ + 398, + 117, + 16, + 32, + -9, + -53 + ], + [ + 415, + 117, + 16, + 32, + -9, + -53 + ], + [ + 432, + 117, + 16, + 32, + -9, + -53 + ] + ], + [ + [ + 449, + 117, + 33, + 34, + -17, + -54 + ], + [ + 0, + 154, + 33, + 34, + -17, + -54 + ], + [ + 34, + 154, + 33, + 34, + -17, + -54 + ], + [ + 68, + 154, + 33, + 34, + -17, + -54 + ], + [ + 102, + 154, + 33, + 34, + -17, + -54 + ], + [ + 136, + 154, + 33, + 34, + -17, + -54 + ] + ], + [ + [ + 170, + 154, + 34, + 36, + -17, + -55 + ], + [ + 205, + 154, + 34, + 36, + -17, + -55 + ], + [ + 240, + 154, + 34, + 36, + -17, + -55 + ], + [ + 275, + 154, + 34, + 36, + -17, + -55 + ], + [ + 310, + 154, + 34, + 36, + -17, + -55 + ], + [ + 345, + 154, + 34, + 36, + -17, + -55 + ] + ], + [ + [ + 380, + 154, + 16, + 38, + -7, + -56 + ], + [ + 397, + 154, + 16, + 38, + -7, + -56 + ], + [ + 414, + 154, + 16, + 38, + -7, + -56 + ], + [ + 431, + 154, + 16, + 38, + -7, + -56 + ], + [ + 448, + 154, + 16, + 38, + -7, + -56 + ], + [ + 465, + 154, + 16, + 38, + -7, + -56 + ] + ] + ] +} \ No newline at end of file diff --git a/public/missiles/blessedhammerex.png b/public/missiles/blessedhammerex.png new file mode 100644 index 0000000..e3ff66b Binary files /dev/null and b/public/missiles/blessedhammerex.png differ diff --git a/public/missiles/blood1.json b/public/missiles/blood1.json new file mode 100644 index 0000000..d228534 --- /dev/null +++ b/public/missiles/blood1.json @@ -0,0 +1,603 @@ +{ + "name": "blood1", + "celFile": "BloodSmall01", + "width": 512, + "height": 348, + "directions": 8, + "framesPerDirection": 9, + "animSpeed": 16, + "groups": [ + [ + [ + 0, + 0, + 32, + 54, + -18, + -44 + ], + [ + 33, + 0, + 32, + 54, + -18, + -44 + ], + [ + 66, + 0, + 32, + 54, + -18, + -44 + ], + [ + 99, + 0, + 32, + 54, + -18, + -44 + ], + [ + 132, + 0, + 32, + 54, + -18, + -44 + ], + [ + 165, + 0, + 32, + 54, + -18, + -44 + ], + [ + 198, + 0, + 32, + 54, + -18, + -44 + ], + [ + 231, + 0, + 32, + 54, + -18, + -44 + ], + [ + 264, + 0, + 32, + 54, + -18, + -44 + ] + ], + [ + [ + 297, + 0, + 38, + 57, + -20, + -50 + ], + [ + 336, + 0, + 38, + 57, + -20, + -50 + ], + [ + 375, + 0, + 38, + 57, + -20, + -50 + ], + [ + 414, + 0, + 38, + 57, + -20, + -50 + ], + [ + 453, + 0, + 38, + 57, + -20, + -50 + ], + [ + 0, + 58, + 38, + 57, + -20, + -50 + ], + [ + 39, + 58, + 38, + 57, + -20, + -50 + ], + [ + 78, + 58, + 38, + 57, + -20, + -50 + ], + [ + 117, + 58, + 38, + 57, + -20, + -50 + ] + ], + [ + [ + 156, + 58, + 32, + 59, + -14, + -50 + ], + [ + 189, + 58, + 32, + 59, + -14, + -50 + ], + [ + 222, + 58, + 32, + 59, + -14, + -50 + ], + [ + 255, + 58, + 32, + 59, + -14, + -50 + ], + [ + 288, + 58, + 32, + 59, + -14, + -50 + ], + [ + 321, + 58, + 32, + 59, + -14, + -50 + ], + [ + 354, + 58, + 32, + 59, + -14, + -50 + ], + [ + 387, + 58, + 32, + 59, + -14, + -50 + ], + [ + 420, + 58, + 32, + 59, + -14, + -50 + ] + ], + [ + [ + 453, + 58, + 38, + 53, + -18, + -44 + ], + [ + 0, + 118, + 38, + 53, + -18, + -44 + ], + [ + 39, + 118, + 38, + 53, + -18, + -44 + ], + [ + 78, + 118, + 38, + 53, + -18, + -44 + ], + [ + 117, + 118, + 38, + 53, + -18, + -44 + ], + [ + 156, + 118, + 38, + 53, + -18, + -44 + ], + [ + 195, + 118, + 38, + 53, + -18, + -44 + ], + [ + 234, + 118, + 38, + 53, + -18, + -44 + ], + [ + 273, + 118, + 38, + 53, + -18, + -44 + ] + ], + [ + [ + 312, + 118, + 30, + 54, + -16, + -43 + ], + [ + 343, + 118, + 30, + 54, + -16, + -43 + ], + [ + 374, + 118, + 30, + 54, + -16, + -43 + ], + [ + 405, + 118, + 30, + 54, + -16, + -43 + ], + [ + 436, + 118, + 30, + 54, + -16, + -43 + ], + [ + 467, + 118, + 30, + 54, + -16, + -43 + ], + [ + 0, + 173, + 30, + 54, + -16, + -43 + ], + [ + 31, + 173, + 30, + 54, + -16, + -43 + ], + [ + 62, + 173, + 30, + 54, + -16, + -43 + ] + ], + [ + [ + 93, + 173, + 37, + 54, + -21, + -47 + ], + [ + 131, + 173, + 37, + 54, + -21, + -47 + ], + [ + 169, + 173, + 37, + 54, + -21, + -47 + ], + [ + 207, + 173, + 37, + 54, + -21, + -47 + ], + [ + 245, + 173, + 37, + 54, + -21, + -47 + ], + [ + 283, + 173, + 37, + 54, + -21, + -47 + ], + [ + 321, + 173, + 37, + 54, + -21, + -47 + ], + [ + 359, + 173, + 37, + 54, + -21, + -47 + ], + [ + 397, + 173, + 37, + 54, + -21, + -47 + ] + ], + [ + [ + 435, + 173, + 30, + 59, + -14, + -51 + ], + [ + 466, + 173, + 30, + 59, + -14, + -51 + ], + [ + 0, + 233, + 30, + 59, + -14, + -51 + ], + [ + 31, + 233, + 30, + 59, + -14, + -51 + ], + [ + 62, + 233, + 30, + 59, + -14, + -51 + ], + [ + 93, + 233, + 30, + 59, + -14, + -51 + ], + [ + 124, + 233, + 30, + 59, + -14, + -51 + ], + [ + 155, + 233, + 30, + 59, + -14, + -51 + ], + [ + 186, + 233, + 30, + 59, + -14, + -51 + ] + ], + [ + [ + 217, + 233, + 37, + 55, + -16, + -47 + ], + [ + 255, + 233, + 37, + 55, + -16, + -47 + ], + [ + 293, + 233, + 37, + 55, + -16, + -47 + ], + [ + 331, + 233, + 37, + 55, + -16, + -47 + ], + [ + 369, + 233, + 37, + 55, + -16, + -47 + ], + [ + 407, + 233, + 37, + 55, + -16, + -47 + ], + [ + 445, + 233, + 37, + 55, + -16, + -47 + ], + [ + 0, + 293, + 37, + 55, + -16, + -47 + ], + [ + 38, + 293, + 37, + 55, + -16, + -47 + ] + ] + ] +} \ No newline at end of file diff --git a/public/missiles/blood1.png b/public/missiles/blood1.png new file mode 100644 index 0000000..59df04f Binary files /dev/null and b/public/missiles/blood1.png differ diff --git a/public/missiles/fistoftheheavensbolt.json b/public/missiles/fistoftheheavensbolt.json new file mode 100644 index 0000000..09a24b3 --- /dev/null +++ b/public/missiles/fistoftheheavensbolt.json @@ -0,0 +1,141 @@ +{ + "name": "fistoftheheavensbolt", + "celFile": "HolyBoltMissile", + "width": 512, + "height": 137, + "directions": 1, + "framesPerDirection": 16, + "animSpeed": 16, + "groups": [ + [ + [ + 0, + 0, + 79, + 45, + -39, + -59 + ], + [ + 80, + 0, + 79, + 45, + -39, + -59 + ], + [ + 160, + 0, + 79, + 45, + -39, + -59 + ], + [ + 240, + 0, + 79, + 45, + -39, + -59 + ], + [ + 320, + 0, + 79, + 45, + -39, + -59 + ], + [ + 400, + 0, + 79, + 45, + -39, + -59 + ], + [ + 0, + 46, + 79, + 45, + -39, + -59 + ], + [ + 80, + 46, + 79, + 45, + -39, + -59 + ], + [ + 160, + 46, + 79, + 45, + -39, + -59 + ], + [ + 240, + 46, + 79, + 45, + -39, + -59 + ], + [ + 320, + 46, + 79, + 45, + -39, + -59 + ], + [ + 400, + 46, + 79, + 45, + -39, + -59 + ], + [ + 0, + 92, + 79, + 45, + -39, + -59 + ], + [ + 80, + 92, + 79, + 45, + -39, + -59 + ], + [ + 160, + 92, + 79, + 45, + -39, + -59 + ], + [ + 240, + 92, + 79, + 45, + -39, + -59 + ] + ] + ] +} \ No newline at end of file diff --git a/public/missiles/fistoftheheavensbolt.png b/public/missiles/fistoftheheavensbolt.png new file mode 100644 index 0000000..d582cbe Binary files /dev/null and b/public/missiles/fistoftheheavensbolt.png differ diff --git a/public/missiles/foa.json b/public/missiles/foa.json new file mode 100644 index 0000000..5aab822 --- /dev/null +++ b/public/missiles/foa.json @@ -0,0 +1,85 @@ +{ + "name": "foa", + "celFile": "FOAorbiter", + "width": 512, + "height": 34, + "directions": 1, + "framesPerDirection": 9, + "animSpeed": 16, + "groups": [ + [ + [ + 0, + 0, + 34, + 34, + -18, + -51 + ], + [ + 35, + 0, + 34, + 34, + -18, + -51 + ], + [ + 70, + 0, + 34, + 34, + -18, + -51 + ], + [ + 105, + 0, + 34, + 34, + -18, + -51 + ], + [ + 140, + 0, + 34, + 34, + -18, + -51 + ], + [ + 175, + 0, + 34, + 34, + -18, + -51 + ], + [ + 210, + 0, + 34, + 34, + -18, + -51 + ], + [ + 245, + 0, + 34, + 34, + -18, + -51 + ], + [ + 280, + 0, + 34, + 34, + -18, + -51 + ] + ] + ] +} \ No newline at end of file diff --git a/public/missiles/foa.png b/public/missiles/foa.png new file mode 100644 index 0000000..da35dbe Binary files /dev/null and b/public/missiles/foa.png differ diff --git a/public/overlays/AuraHfireIndicate.json b/public/overlays/AuraHfireIndicate.json new file mode 100644 index 0000000..ada46c6 --- /dev/null +++ b/public/overlays/AuraHfireIndicate.json @@ -0,0 +1,180 @@ +{ + "name": "thorns_indicate", + "celFile": "AuraHfireIndicate", + "width": 512, + "height": 116, + "directions": 1, + "frames": 19, + "framesPerDirection": 19, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -32, + "top": -20, + "width": 64, + "height": 38 + }, + "groups": [ + [ + [ + 0, + 0, + 64, + 38, + -32, + -20 + ], + [ + 65, + 0, + 64, + 38, + -32, + -20 + ], + [ + 130, + 0, + 64, + 38, + -32, + -20 + ], + [ + 195, + 0, + 64, + 38, + -32, + -20 + ], + [ + 260, + 0, + 64, + 38, + -32, + -20 + ], + [ + 325, + 0, + 64, + 38, + -32, + -20 + ], + [ + 390, + 0, + 64, + 38, + -32, + -20 + ], + [ + 0, + 39, + 64, + 38, + -32, + -20 + ], + [ + 65, + 39, + 64, + 38, + -32, + -20 + ], + [ + 130, + 39, + 64, + 38, + -32, + -20 + ], + [ + 195, + 39, + 64, + 38, + -32, + -20 + ], + [ + 260, + 39, + 64, + 38, + -32, + -20 + ], + [ + 325, + 39, + 64, + 38, + -32, + -20 + ], + [ + 390, + 39, + 64, + 38, + -32, + -20 + ], + [ + 0, + 78, + 64, + 38, + -32, + -20 + ], + [ + 65, + 78, + 64, + 38, + -32, + -20 + ], + [ + 130, + 78, + 64, + 38, + -32, + -20 + ], + [ + 195, + 78, + 64, + 38, + -32, + -20 + ], + [ + 260, + 78, + 64, + 38, + -32, + -20 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/AuraHfireIndicate.png b/public/overlays/AuraHfireIndicate.png new file mode 100644 index 0000000..42ef50a Binary files /dev/null and b/public/overlays/AuraHfireIndicate.png differ diff --git a/public/overlays/AuraHolyFireHit.json b/public/overlays/AuraHolyFireHit.json new file mode 100644 index 0000000..e127638 --- /dev/null +++ b/public/overlays/AuraHolyFireHit.json @@ -0,0 +1,172 @@ +{ + "name": "holy_fire_hit", + "celFile": "AuraHolyFireHit", + "width": 512, + "height": 179, + "directions": 1, + "frames": 18, + "framesPerDirection": 18, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -42, + "top": -58, + "width": 84, + "height": 59 + }, + "groups": [ + [ + [ + 0, + 0, + 84, + 59, + -42, + -58 + ], + [ + 85, + 0, + 84, + 59, + -42, + -58 + ], + [ + 170, + 0, + 84, + 59, + -42, + -58 + ], + [ + 255, + 0, + 84, + 59, + -42, + -58 + ], + [ + 340, + 0, + 84, + 59, + -42, + -58 + ], + [ + 425, + 0, + 84, + 59, + -42, + -58 + ], + [ + 0, + 60, + 84, + 59, + -42, + -58 + ], + [ + 85, + 60, + 84, + 59, + -42, + -58 + ], + [ + 170, + 60, + 84, + 59, + -42, + -58 + ], + [ + 255, + 60, + 84, + 59, + -42, + -58 + ], + [ + 340, + 60, + 84, + 59, + -42, + -58 + ], + [ + 425, + 60, + 84, + 59, + -42, + -58 + ], + [ + 0, + 120, + 84, + 59, + -42, + -58 + ], + [ + 85, + 120, + 84, + 59, + -42, + -58 + ], + [ + 170, + 120, + 84, + 59, + -42, + -58 + ], + [ + 255, + 120, + 84, + 59, + -42, + -58 + ], + [ + 340, + 120, + 84, + 59, + -42, + -58 + ], + [ + 425, + 120, + 84, + 59, + -42, + -58 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/AuraHolyFireHit.png b/public/overlays/AuraHolyFireHit.png new file mode 100644 index 0000000..d92e01c Binary files /dev/null and b/public/overlays/AuraHolyFireHit.png differ diff --git a/public/overlays/AuraResistAllCast.json b/public/overlays/AuraResistAllCast.json new file mode 100644 index 0000000..e300cb1 --- /dev/null +++ b/public/overlays/AuraResistAllCast.json @@ -0,0 +1,188 @@ +{ + "name": "cast_resistall", + "celFile": "AuraResistAllCast", + "width": 512, + "height": 179, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -47, + "top": -24, + "width": 90, + "height": 44 + }, + "groups": [ + [ + [ + 0, + 0, + 90, + 44, + -47, + -24 + ], + [ + 91, + 0, + 90, + 44, + -47, + -24 + ], + [ + 182, + 0, + 90, + 44, + -47, + -24 + ], + [ + 273, + 0, + 90, + 44, + -47, + -24 + ], + [ + 364, + 0, + 90, + 44, + -47, + -24 + ], + [ + 0, + 45, + 90, + 44, + -47, + -24 + ], + [ + 91, + 45, + 90, + 44, + -47, + -24 + ], + [ + 182, + 45, + 90, + 44, + -47, + -24 + ], + [ + 273, + 45, + 90, + 44, + -47, + -24 + ], + [ + 364, + 45, + 90, + 44, + -47, + -24 + ], + [ + 0, + 90, + 90, + 44, + -47, + -24 + ], + [ + 91, + 90, + 90, + 44, + -47, + -24 + ], + [ + 182, + 90, + 90, + 44, + -47, + -24 + ], + [ + 273, + 90, + 90, + 44, + -47, + -24 + ], + [ + 364, + 90, + 90, + 44, + -47, + -24 + ], + [ + 0, + 135, + 90, + 44, + -47, + -24 + ], + [ + 91, + 135, + 90, + 44, + -47, + -24 + ], + [ + 182, + 135, + 90, + 44, + -47, + -24 + ], + [ + 273, + 135, + 90, + 44, + -47, + -24 + ], + [ + 364, + 135, + 90, + 44, + -47, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/AuraResistAllCast.png b/public/overlays/AuraResistAllCast.png new file mode 100644 index 0000000..f4fbfb5 Binary files /dev/null and b/public/overlays/AuraResistAllCast.png differ diff --git a/public/overlays/AuraResistColdBackCast.json b/public/overlays/AuraResistColdBackCast.json new file mode 100644 index 0000000..10bb4ab --- /dev/null +++ b/public/overlays/AuraResistColdBackCast.json @@ -0,0 +1,116 @@ +{ + "name": "cast_resistcold", + "celFile": "AuraResistColdBackCast", + "width": 512, + "height": 137, + "directions": 1, + "frames": 11, + "framesPerDirection": 11, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -62, + "top": -24, + "width": 123, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 123, + 45, + -62, + -24 + ], + [ + 124, + 0, + 123, + 45, + -62, + -24 + ], + [ + 248, + 0, + 123, + 45, + -62, + -24 + ], + [ + 372, + 0, + 123, + 45, + -62, + -24 + ], + [ + 0, + 46, + 123, + 45, + -62, + -24 + ], + [ + 124, + 46, + 123, + 45, + -62, + -24 + ], + [ + 248, + 46, + 123, + 45, + -62, + -24 + ], + [ + 372, + 46, + 123, + 45, + -62, + -24 + ], + [ + 0, + 92, + 123, + 45, + -62, + -24 + ], + [ + 124, + 92, + 123, + 45, + -62, + -24 + ], + [ + 248, + 92, + 123, + 45, + -62, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/AuraResistColdBackCast.png b/public/overlays/AuraResistColdBackCast.png new file mode 100644 index 0000000..3afb276 Binary files /dev/null and b/public/overlays/AuraResistColdBackCast.png differ diff --git a/public/overlays/AuraResistFireFrontCast.json b/public/overlays/AuraResistFireFrontCast.json new file mode 100644 index 0000000..8418f3a --- /dev/null +++ b/public/overlays/AuraResistFireFrontCast.json @@ -0,0 +1,116 @@ +{ + "name": "cast_resistfire", + "celFile": "AuraResistFireFrontCast", + "width": 512, + "height": 137, + "directions": 1, + "frames": 11, + "framesPerDirection": 11, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -59, + "top": -24, + "width": 119, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 119, + 45, + -59, + -24 + ], + [ + 120, + 0, + 119, + 45, + -59, + -24 + ], + [ + 240, + 0, + 119, + 45, + -59, + -24 + ], + [ + 360, + 0, + 119, + 45, + -59, + -24 + ], + [ + 0, + 46, + 119, + 45, + -59, + -24 + ], + [ + 120, + 46, + 119, + 45, + -59, + -24 + ], + [ + 240, + 46, + 119, + 45, + -59, + -24 + ], + [ + 360, + 46, + 119, + 45, + -59, + -24 + ], + [ + 0, + 92, + 119, + 45, + -59, + -24 + ], + [ + 120, + 92, + 119, + 45, + -59, + -24 + ], + [ + 240, + 92, + 119, + 45, + -59, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/AuraResistFireFrontCast.png b/public/overlays/AuraResistFireFrontCast.png new file mode 100644 index 0000000..f08e7fa Binary files /dev/null and b/public/overlays/AuraResistFireFrontCast.png differ diff --git a/public/overlays/AuraResistLightningBackCast.json b/public/overlays/AuraResistLightningBackCast.json new file mode 100644 index 0000000..5ee1ea5 --- /dev/null +++ b/public/overlays/AuraResistLightningBackCast.json @@ -0,0 +1,116 @@ +{ + "name": "cast_resistlight", + "celFile": "AuraResistLightningBackCast", + "width": 512, + "height": 137, + "directions": 1, + "frames": 11, + "framesPerDirection": 11, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -59, + "top": -24, + "width": 119, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 119, + 45, + -59, + -24 + ], + [ + 120, + 0, + 119, + 45, + -59, + -24 + ], + [ + 240, + 0, + 119, + 45, + -59, + -24 + ], + [ + 360, + 0, + 119, + 45, + -59, + -24 + ], + [ + 0, + 46, + 119, + 45, + -59, + -24 + ], + [ + 120, + 46, + 119, + 45, + -59, + -24 + ], + [ + 240, + 46, + 119, + 45, + -59, + -24 + ], + [ + 360, + 46, + 119, + 45, + -59, + -24 + ], + [ + 0, + 92, + 119, + 45, + -59, + -24 + ], + [ + 120, + 92, + 119, + 45, + -59, + -24 + ], + [ + 240, + 92, + 119, + 45, + -59, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/AuraResistLightningBackCast.png b/public/overlays/AuraResistLightningBackCast.png new file mode 100644 index 0000000..670422e Binary files /dev/null and b/public/overlays/AuraResistLightningBackCast.png differ diff --git a/public/overlays/AuraThornsHit.json b/public/overlays/AuraThornsHit.json index 942395d..7aee358 100644 --- a/public/overlays/AuraThornsHit.json +++ b/public/overlays/AuraThornsHit.json @@ -1,5 +1,5 @@ { - "name": "hit_ironmaiden", + "name": "thorns_hit", "celFile": "AuraThornsHit", "width": 512, "height": 129, diff --git a/public/overlays/Charge.json b/public/overlays/Charge.json new file mode 100644 index 0000000..7cbc91b --- /dev/null +++ b/public/overlays/Charge.json @@ -0,0 +1,92 @@ +{ + "name": "charge", + "celFile": "Charge", + "width": 512, + "height": 93, + "directions": 1, + "frames": 8, + "framesPerDirection": 8, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -32, + "top": -27, + "width": 65, + "height": 46 + }, + "groups": [ + [ + [ + 0, + 0, + 65, + 46, + -32, + -27 + ], + [ + 66, + 0, + 65, + 46, + -32, + -27 + ], + [ + 132, + 0, + 65, + 46, + -32, + -27 + ], + [ + 198, + 0, + 65, + 46, + -32, + -27 + ], + [ + 264, + 0, + 65, + 46, + -32, + -27 + ], + [ + 330, + 0, + 65, + 46, + -32, + -27 + ], + [ + 396, + 0, + 65, + 46, + -32, + -27 + ], + [ + 0, + 47, + 65, + 46, + -32, + -27 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/Charge.png b/public/overlays/Charge.png new file mode 100644 index 0000000..445572a Binary files /dev/null and b/public/overlays/Charge.png differ diff --git a/public/overlays/Conversion.json b/public/overlays/Conversion.json new file mode 100644 index 0000000..3ab9007 --- /dev/null +++ b/public/overlays/Conversion.json @@ -0,0 +1,108 @@ +{ + "name": "conversion", + "celFile": "Conversion", + "width": 512, + "height": 52, + "directions": 1, + "frames": 10, + "framesPerDirection": 10, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -23, + "top": -81, + "width": 46, + "height": 52 + }, + "groups": [ + [ + [ + 0, + 0, + 46, + 52, + -23, + -81 + ], + [ + 47, + 0, + 46, + 52, + -23, + -81 + ], + [ + 94, + 0, + 46, + 52, + -23, + -81 + ], + [ + 141, + 0, + 46, + 52, + -23, + -81 + ], + [ + 188, + 0, + 46, + 52, + -23, + -81 + ], + [ + 235, + 0, + 46, + 52, + -23, + -81 + ], + [ + 282, + 0, + 46, + 52, + -23, + -81 + ], + [ + 329, + 0, + 46, + 52, + -23, + -81 + ], + [ + 376, + 0, + 46, + 52, + -23, + -81 + ], + [ + 423, + 0, + 46, + 52, + -23, + -81 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/Conversion.png b/public/overlays/Conversion.png new file mode 100644 index 0000000..199302e Binary files /dev/null and b/public/overlays/Conversion.png differ diff --git a/public/overlays/FOACast.json b/public/overlays/FOACast.json new file mode 100644 index 0000000..d9fe864 --- /dev/null +++ b/public/overlays/FOACast.json @@ -0,0 +1,188 @@ +{ + "name": "fist_of_the_heavens_cast", + "celFile": "FOACast", + "width": 1024, + "height": 326, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -56, + "top": -120, + "width": 108, + "height": 108 + }, + "groups": [ + [ + [ + 0, + 0, + 108, + 108, + -56, + -120 + ], + [ + 109, + 0, + 108, + 108, + -56, + -120 + ], + [ + 218, + 0, + 108, + 108, + -56, + -120 + ], + [ + 327, + 0, + 108, + 108, + -56, + -120 + ], + [ + 436, + 0, + 108, + 108, + -56, + -120 + ], + [ + 545, + 0, + 108, + 108, + -56, + -120 + ], + [ + 654, + 0, + 108, + 108, + -56, + -120 + ], + [ + 763, + 0, + 108, + 108, + -56, + -120 + ], + [ + 872, + 0, + 108, + 108, + -56, + -120 + ], + [ + 0, + 109, + 108, + 108, + -56, + -120 + ], + [ + 109, + 109, + 108, + 108, + -56, + -120 + ], + [ + 218, + 109, + 108, + 108, + -56, + -120 + ], + [ + 327, + 109, + 108, + 108, + -56, + -120 + ], + [ + 436, + 109, + 108, + 108, + -56, + -120 + ], + [ + 545, + 109, + 108, + 108, + -56, + -120 + ], + [ + 654, + 109, + 108, + 108, + -56, + -120 + ], + [ + 763, + 109, + 108, + 108, + -56, + -120 + ], + [ + 872, + 109, + 108, + 108, + -56, + -120 + ], + [ + 0, + 218, + 108, + 108, + -56, + -120 + ], + [ + 109, + 218, + 108, + 108, + -56, + -120 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/FOACast.png b/public/overlays/FOACast.png new file mode 100644 index 0000000..bcb345c Binary files /dev/null and b/public/overlays/FOACast.png differ diff --git a/public/overlays/HolyBoltCloud.json b/public/overlays/HolyBoltCloud.json new file mode 100644 index 0000000..221db5f --- /dev/null +++ b/public/overlays/HolyBoltCloud.json @@ -0,0 +1,156 @@ +{ + "name": "holy_bolt_cast", + "celFile": "HolyBoltCloud", + "width": 1024, + "height": 519, + "directions": 1, + "frames": 16, + "framesPerDirection": 16, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -93, + "top": -110, + "width": 183, + "height": 129 + }, + "groups": [ + [ + [ + 0, + 0, + 183, + 129, + -93, + -110 + ], + [ + 184, + 0, + 183, + 129, + -93, + -110 + ], + [ + 368, + 0, + 183, + 129, + -93, + -110 + ], + [ + 552, + 0, + 183, + 129, + -93, + -110 + ], + [ + 736, + 0, + 183, + 129, + -93, + -110 + ], + [ + 0, + 130, + 183, + 129, + -93, + -110 + ], + [ + 184, + 130, + 183, + 129, + -93, + -110 + ], + [ + 368, + 130, + 183, + 129, + -93, + -110 + ], + [ + 552, + 130, + 183, + 129, + -93, + -110 + ], + [ + 736, + 130, + 183, + 129, + -93, + -110 + ], + [ + 0, + 260, + 183, + 129, + -93, + -110 + ], + [ + 184, + 260, + 183, + 129, + -93, + -110 + ], + [ + 368, + 260, + 183, + 129, + -93, + -110 + ], + [ + 552, + 260, + 183, + 129, + -93, + -110 + ], + [ + 736, + 260, + 183, + 129, + -93, + -110 + ], + [ + 0, + 390, + 183, + 129, + -93, + -110 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/HolyBoltCloud.png b/public/overlays/HolyBoltCloud.png new file mode 100644 index 0000000..9ac6f86 Binary files /dev/null and b/public/overlays/HolyBoltCloud.png differ diff --git a/public/overlays/HolyShockHit.json b/public/overlays/HolyShockHit.json new file mode 100644 index 0000000..3daa49a --- /dev/null +++ b/public/overlays/HolyShockHit.json @@ -0,0 +1,196 @@ +{ + "name": "handofgod", + "celFile": "HolyShockHit", + "width": 1024, + "height": 513, + "directions": 1, + "frames": 21, + "framesPerDirection": 21, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -29, + "top": -240, + "width": 62, + "height": 256 + }, + "groups": [ + [ + [ + 0, + 0, + 62, + 256, + -29, + -240 + ], + [ + 63, + 0, + 62, + 256, + -29, + -240 + ], + [ + 126, + 0, + 62, + 256, + -29, + -240 + ], + [ + 189, + 0, + 62, + 256, + -29, + -240 + ], + [ + 252, + 0, + 62, + 256, + -29, + -240 + ], + [ + 315, + 0, + 62, + 256, + -29, + -240 + ], + [ + 378, + 0, + 62, + 256, + -29, + -240 + ], + [ + 441, + 0, + 62, + 256, + -29, + -240 + ], + [ + 504, + 0, + 62, + 256, + -29, + -240 + ], + [ + 567, + 0, + 62, + 256, + -29, + -240 + ], + [ + 630, + 0, + 62, + 256, + -29, + -240 + ], + [ + 693, + 0, + 62, + 256, + -29, + -240 + ], + [ + 756, + 0, + 62, + 256, + -29, + -240 + ], + [ + 819, + 0, + 62, + 256, + -29, + -240 + ], + [ + 882, + 0, + 62, + 256, + -29, + -240 + ], + [ + 945, + 0, + 62, + 256, + -29, + -240 + ], + [ + 0, + 257, + 62, + 256, + -29, + -240 + ], + [ + 63, + 257, + 62, + 256, + -29, + -240 + ], + [ + 126, + 257, + 62, + 256, + -29, + -240 + ], + [ + 189, + 257, + 62, + 256, + -29, + -240 + ], + [ + 252, + 257, + 62, + 256, + -29, + -240 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/HolyShockHit.png b/public/overlays/HolyShockHit.png new file mode 100644 index 0000000..9bd69f7 Binary files /dev/null and b/public/overlays/HolyShockHit.png differ diff --git a/public/overlays/SanctuaryKnockback.json b/public/overlays/SanctuaryKnockback.json new file mode 100644 index 0000000..9bbf61e --- /dev/null +++ b/public/overlays/SanctuaryKnockback.json @@ -0,0 +1,132 @@ +{ + "name": "sanctuary_knockback", + "celFile": "SanctuaryKnockback", + "width": 512, + "height": 362, + "directions": 1, + "frames": 13, + "framesPerDirection": 13, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -37, + "top": -96, + "width": 73, + "height": 120 + }, + "groups": [ + [ + [ + 0, + 0, + 73, + 120, + -37, + -96 + ], + [ + 74, + 0, + 73, + 120, + -37, + -96 + ], + [ + 148, + 0, + 73, + 120, + -37, + -96 + ], + [ + 222, + 0, + 73, + 120, + -37, + -96 + ], + [ + 296, + 0, + 73, + 120, + -37, + -96 + ], + [ + 370, + 0, + 73, + 120, + -37, + -96 + ], + [ + 0, + 121, + 73, + 120, + -37, + -96 + ], + [ + 74, + 121, + 73, + 120, + -37, + -96 + ], + [ + 148, + 121, + 73, + 120, + -37, + -96 + ], + [ + 222, + 121, + 73, + 120, + -37, + -96 + ], + [ + 296, + 121, + 73, + 120, + -37, + -96 + ], + [ + 370, + 121, + 73, + 120, + -37, + -96 + ], + [ + 0, + 242, + 73, + 120, + -37, + -96 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/SanctuaryKnockback.png b/public/overlays/SanctuaryKnockback.png new file mode 100644 index 0000000..9783887 Binary files /dev/null and b/public/overlays/SanctuaryKnockback.png differ diff --git a/public/overlays/Stun.json b/public/overlays/Stun.json new file mode 100644 index 0000000..559a987 --- /dev/null +++ b/public/overlays/Stun.json @@ -0,0 +1,124 @@ +{ + "name": "stun", + "celFile": "Stun", + "width": 512, + "height": 99, + "directions": 1, + "frames": 12, + "framesPerDirection": 12, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -34, + "top": -87, + "width": 69, + "height": 49 + }, + "groups": [ + [ + [ + 0, + 0, + 69, + 49, + -34, + -87 + ], + [ + 70, + 0, + 69, + 49, + -34, + -87 + ], + [ + 140, + 0, + 69, + 49, + -34, + -87 + ], + [ + 210, + 0, + 69, + 49, + -34, + -87 + ], + [ + 280, + 0, + 69, + 49, + -34, + -87 + ], + [ + 350, + 0, + 69, + 49, + -34, + -87 + ], + [ + 420, + 0, + 69, + 49, + -34, + -87 + ], + [ + 0, + 50, + 69, + 49, + -34, + -87 + ], + [ + 70, + 50, + 69, + 49, + -34, + -87 + ], + [ + 140, + 50, + 69, + 49, + -34, + -87 + ], + [ + 210, + 50, + 69, + 49, + -34, + -87 + ], + [ + 280, + 50, + 69, + 49, + -34, + -87 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/Stun.png b/public/overlays/Stun.png new file mode 100644 index 0000000..084d84f Binary files /dev/null and b/public/overlays/Stun.png differ diff --git a/public/overlays/aurahfireindicate.json b/public/overlays/aurahfireindicate.json new file mode 100644 index 0000000..2292f35 --- /dev/null +++ b/public/overlays/aurahfireindicate.json @@ -0,0 +1,180 @@ +{ + "name": "holy_fire_indicate", + "celFile": "AuraHfireIndicate", + "width": 512, + "height": 116, + "directions": 1, + "frames": 19, + "framesPerDirection": 19, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -32, + "top": -20, + "width": 64, + "height": 38 + }, + "groups": [ + [ + [ + 0, + 0, + 64, + 38, + -32, + -20 + ], + [ + 65, + 0, + 64, + 38, + -32, + -20 + ], + [ + 130, + 0, + 64, + 38, + -32, + -20 + ], + [ + 195, + 0, + 64, + 38, + -32, + -20 + ], + [ + 260, + 0, + 64, + 38, + -32, + -20 + ], + [ + 325, + 0, + 64, + 38, + -32, + -20 + ], + [ + 390, + 0, + 64, + 38, + -32, + -20 + ], + [ + 0, + 39, + 64, + 38, + -32, + -20 + ], + [ + 65, + 39, + 64, + 38, + -32, + -20 + ], + [ + 130, + 39, + 64, + 38, + -32, + -20 + ], + [ + 195, + 39, + 64, + 38, + -32, + -20 + ], + [ + 260, + 39, + 64, + 38, + -32, + -20 + ], + [ + 325, + 39, + 64, + 38, + -32, + -20 + ], + [ + 390, + 39, + 64, + 38, + -32, + -20 + ], + [ + 0, + 78, + 64, + 38, + -32, + -20 + ], + [ + 65, + 78, + 64, + 38, + -32, + -20 + ], + [ + 130, + 78, + 64, + 38, + -32, + -20 + ], + [ + 195, + 78, + 64, + 38, + -32, + -20 + ], + [ + 260, + 78, + 64, + 38, + -32, + -20 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/aurahfireindicate.png b/public/overlays/aurahfireindicate.png new file mode 100644 index 0000000..42ef50a Binary files /dev/null and b/public/overlays/aurahfireindicate.png differ diff --git a/public/overlays/auraholyfirehit.json b/public/overlays/auraholyfirehit.json new file mode 100644 index 0000000..e127638 --- /dev/null +++ b/public/overlays/auraholyfirehit.json @@ -0,0 +1,172 @@ +{ + "name": "holy_fire_hit", + "celFile": "AuraHolyFireHit", + "width": 512, + "height": 179, + "directions": 1, + "frames": 18, + "framesPerDirection": 18, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -42, + "top": -58, + "width": 84, + "height": 59 + }, + "groups": [ + [ + [ + 0, + 0, + 84, + 59, + -42, + -58 + ], + [ + 85, + 0, + 84, + 59, + -42, + -58 + ], + [ + 170, + 0, + 84, + 59, + -42, + -58 + ], + [ + 255, + 0, + 84, + 59, + -42, + -58 + ], + [ + 340, + 0, + 84, + 59, + -42, + -58 + ], + [ + 425, + 0, + 84, + 59, + -42, + -58 + ], + [ + 0, + 60, + 84, + 59, + -42, + -58 + ], + [ + 85, + 60, + 84, + 59, + -42, + -58 + ], + [ + 170, + 60, + 84, + 59, + -42, + -58 + ], + [ + 255, + 60, + 84, + 59, + -42, + -58 + ], + [ + 340, + 60, + 84, + 59, + -42, + -58 + ], + [ + 425, + 60, + 84, + 59, + -42, + -58 + ], + [ + 0, + 120, + 84, + 59, + -42, + -58 + ], + [ + 85, + 120, + 84, + 59, + -42, + -58 + ], + [ + 170, + 120, + 84, + 59, + -42, + -58 + ], + [ + 255, + 120, + 84, + 59, + -42, + -58 + ], + [ + 340, + 120, + 84, + 59, + -42, + -58 + ], + [ + 425, + 120, + 84, + 59, + -42, + -58 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/auraholyfirehit.png b/public/overlays/auraholyfirehit.png new file mode 100644 index 0000000..d92e01c Binary files /dev/null and b/public/overlays/auraholyfirehit.png differ diff --git a/public/overlays/auraresistallcast.json b/public/overlays/auraresistallcast.json new file mode 100644 index 0000000..e300cb1 --- /dev/null +++ b/public/overlays/auraresistallcast.json @@ -0,0 +1,188 @@ +{ + "name": "cast_resistall", + "celFile": "AuraResistAllCast", + "width": 512, + "height": 179, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -47, + "top": -24, + "width": 90, + "height": 44 + }, + "groups": [ + [ + [ + 0, + 0, + 90, + 44, + -47, + -24 + ], + [ + 91, + 0, + 90, + 44, + -47, + -24 + ], + [ + 182, + 0, + 90, + 44, + -47, + -24 + ], + [ + 273, + 0, + 90, + 44, + -47, + -24 + ], + [ + 364, + 0, + 90, + 44, + -47, + -24 + ], + [ + 0, + 45, + 90, + 44, + -47, + -24 + ], + [ + 91, + 45, + 90, + 44, + -47, + -24 + ], + [ + 182, + 45, + 90, + 44, + -47, + -24 + ], + [ + 273, + 45, + 90, + 44, + -47, + -24 + ], + [ + 364, + 45, + 90, + 44, + -47, + -24 + ], + [ + 0, + 90, + 90, + 44, + -47, + -24 + ], + [ + 91, + 90, + 90, + 44, + -47, + -24 + ], + [ + 182, + 90, + 90, + 44, + -47, + -24 + ], + [ + 273, + 90, + 90, + 44, + -47, + -24 + ], + [ + 364, + 90, + 90, + 44, + -47, + -24 + ], + [ + 0, + 135, + 90, + 44, + -47, + -24 + ], + [ + 91, + 135, + 90, + 44, + -47, + -24 + ], + [ + 182, + 135, + 90, + 44, + -47, + -24 + ], + [ + 273, + 135, + 90, + 44, + -47, + -24 + ], + [ + 364, + 135, + 90, + 44, + -47, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/auraresistallcast.png b/public/overlays/auraresistallcast.png new file mode 100644 index 0000000..f4fbfb5 Binary files /dev/null and b/public/overlays/auraresistallcast.png differ diff --git a/public/overlays/auraresistfirefrontcast.json b/public/overlays/auraresistfirefrontcast.json new file mode 100644 index 0000000..8418f3a --- /dev/null +++ b/public/overlays/auraresistfirefrontcast.json @@ -0,0 +1,116 @@ +{ + "name": "cast_resistfire", + "celFile": "AuraResistFireFrontCast", + "width": 512, + "height": 137, + "directions": 1, + "frames": 11, + "framesPerDirection": 11, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -59, + "top": -24, + "width": 119, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 119, + 45, + -59, + -24 + ], + [ + 120, + 0, + 119, + 45, + -59, + -24 + ], + [ + 240, + 0, + 119, + 45, + -59, + -24 + ], + [ + 360, + 0, + 119, + 45, + -59, + -24 + ], + [ + 0, + 46, + 119, + 45, + -59, + -24 + ], + [ + 120, + 46, + 119, + 45, + -59, + -24 + ], + [ + 240, + 46, + 119, + 45, + -59, + -24 + ], + [ + 360, + 46, + 119, + 45, + -59, + -24 + ], + [ + 0, + 92, + 119, + 45, + -59, + -24 + ], + [ + 120, + 92, + 119, + 45, + -59, + -24 + ], + [ + 240, + 92, + 119, + 45, + -59, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/auraresistfirefrontcast.png b/public/overlays/auraresistfirefrontcast.png new file mode 100644 index 0000000..f08e7fa Binary files /dev/null and b/public/overlays/auraresistfirefrontcast.png differ diff --git a/public/overlays/auraresistlightningbackcast.json b/public/overlays/auraresistlightningbackcast.json new file mode 100644 index 0000000..5ee1ea5 --- /dev/null +++ b/public/overlays/auraresistlightningbackcast.json @@ -0,0 +1,116 @@ +{ + "name": "cast_resistlight", + "celFile": "AuraResistLightningBackCast", + "width": 512, + "height": 137, + "directions": 1, + "frames": 11, + "framesPerDirection": 11, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -59, + "top": -24, + "width": 119, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 119, + 45, + -59, + -24 + ], + [ + 120, + 0, + 119, + 45, + -59, + -24 + ], + [ + 240, + 0, + 119, + 45, + -59, + -24 + ], + [ + 360, + 0, + 119, + 45, + -59, + -24 + ], + [ + 0, + 46, + 119, + 45, + -59, + -24 + ], + [ + 120, + 46, + 119, + 45, + -59, + -24 + ], + [ + 240, + 46, + 119, + 45, + -59, + -24 + ], + [ + 360, + 46, + 119, + 45, + -59, + -24 + ], + [ + 0, + 92, + 119, + 45, + -59, + -24 + ], + [ + 120, + 92, + 119, + 45, + -59, + -24 + ], + [ + 240, + 92, + 119, + 45, + -59, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/auraresistlightningbackcast.png b/public/overlays/auraresistlightningbackcast.png new file mode 100644 index 0000000..670422e Binary files /dev/null and b/public/overlays/auraresistlightningbackcast.png differ diff --git a/public/overlays/cast_fistofares.json b/public/overlays/cast_fistofares.json new file mode 100644 index 0000000..d9fe864 --- /dev/null +++ b/public/overlays/cast_fistofares.json @@ -0,0 +1,188 @@ +{ + "name": "fist_of_the_heavens_cast", + "celFile": "FOACast", + "width": 1024, + "height": 326, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -56, + "top": -120, + "width": 108, + "height": 108 + }, + "groups": [ + [ + [ + 0, + 0, + 108, + 108, + -56, + -120 + ], + [ + 109, + 0, + 108, + 108, + -56, + -120 + ], + [ + 218, + 0, + 108, + 108, + -56, + -120 + ], + [ + 327, + 0, + 108, + 108, + -56, + -120 + ], + [ + 436, + 0, + 108, + 108, + -56, + -120 + ], + [ + 545, + 0, + 108, + 108, + -56, + -120 + ], + [ + 654, + 0, + 108, + 108, + -56, + -120 + ], + [ + 763, + 0, + 108, + 108, + -56, + -120 + ], + [ + 872, + 0, + 108, + 108, + -56, + -120 + ], + [ + 0, + 109, + 108, + 108, + -56, + -120 + ], + [ + 109, + 109, + 108, + 108, + -56, + -120 + ], + [ + 218, + 109, + 108, + 108, + -56, + -120 + ], + [ + 327, + 109, + 108, + 108, + -56, + -120 + ], + [ + 436, + 109, + 108, + 108, + -56, + -120 + ], + [ + 545, + 109, + 108, + 108, + -56, + -120 + ], + [ + 654, + 109, + 108, + 108, + -56, + -120 + ], + [ + 763, + 109, + 108, + 108, + -56, + -120 + ], + [ + 872, + 109, + 108, + 108, + -56, + -120 + ], + [ + 0, + 218, + 108, + 108, + -56, + -120 + ], + [ + 109, + 218, + 108, + 108, + -56, + -120 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/cast_fistofares.png b/public/overlays/cast_fistofares.png new file mode 100644 index 0000000..bcb345c Binary files /dev/null and b/public/overlays/cast_fistofares.png differ diff --git a/public/overlays/cast_resist_all.json b/public/overlays/cast_resist_all.json new file mode 100644 index 0000000..e300cb1 --- /dev/null +++ b/public/overlays/cast_resist_all.json @@ -0,0 +1,188 @@ +{ + "name": "cast_resistall", + "celFile": "AuraResistAllCast", + "width": 512, + "height": 179, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -47, + "top": -24, + "width": 90, + "height": 44 + }, + "groups": [ + [ + [ + 0, + 0, + 90, + 44, + -47, + -24 + ], + [ + 91, + 0, + 90, + 44, + -47, + -24 + ], + [ + 182, + 0, + 90, + 44, + -47, + -24 + ], + [ + 273, + 0, + 90, + 44, + -47, + -24 + ], + [ + 364, + 0, + 90, + 44, + -47, + -24 + ], + [ + 0, + 45, + 90, + 44, + -47, + -24 + ], + [ + 91, + 45, + 90, + 44, + -47, + -24 + ], + [ + 182, + 45, + 90, + 44, + -47, + -24 + ], + [ + 273, + 45, + 90, + 44, + -47, + -24 + ], + [ + 364, + 45, + 90, + 44, + -47, + -24 + ], + [ + 0, + 90, + 90, + 44, + -47, + -24 + ], + [ + 91, + 90, + 90, + 44, + -47, + -24 + ], + [ + 182, + 90, + 90, + 44, + -47, + -24 + ], + [ + 273, + 90, + 90, + 44, + -47, + -24 + ], + [ + 364, + 90, + 90, + 44, + -47, + -24 + ], + [ + 0, + 135, + 90, + 44, + -47, + -24 + ], + [ + 91, + 135, + 90, + 44, + -47, + -24 + ], + [ + 182, + 135, + 90, + 44, + -47, + -24 + ], + [ + 273, + 135, + 90, + 44, + -47, + -24 + ], + [ + 364, + 135, + 90, + 44, + -47, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/cast_resist_all.png b/public/overlays/cast_resist_all.png new file mode 100644 index 0000000..f4fbfb5 Binary files /dev/null and b/public/overlays/cast_resist_all.png differ diff --git a/public/overlays/cast_resist_cold.json b/public/overlays/cast_resist_cold.json new file mode 100644 index 0000000..10bb4ab --- /dev/null +++ b/public/overlays/cast_resist_cold.json @@ -0,0 +1,116 @@ +{ + "name": "cast_resistcold", + "celFile": "AuraResistColdBackCast", + "width": 512, + "height": 137, + "directions": 1, + "frames": 11, + "framesPerDirection": 11, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -62, + "top": -24, + "width": 123, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 123, + 45, + -62, + -24 + ], + [ + 124, + 0, + 123, + 45, + -62, + -24 + ], + [ + 248, + 0, + 123, + 45, + -62, + -24 + ], + [ + 372, + 0, + 123, + 45, + -62, + -24 + ], + [ + 0, + 46, + 123, + 45, + -62, + -24 + ], + [ + 124, + 46, + 123, + 45, + -62, + -24 + ], + [ + 248, + 46, + 123, + 45, + -62, + -24 + ], + [ + 372, + 46, + 123, + 45, + -62, + -24 + ], + [ + 0, + 92, + 123, + 45, + -62, + -24 + ], + [ + 124, + 92, + 123, + 45, + -62, + -24 + ], + [ + 248, + 92, + 123, + 45, + -62, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/cast_resist_cold.png b/public/overlays/cast_resist_cold.png new file mode 100644 index 0000000..3afb276 Binary files /dev/null and b/public/overlays/cast_resist_cold.png differ diff --git a/public/overlays/cast_resist_fire.json b/public/overlays/cast_resist_fire.json new file mode 100644 index 0000000..8418f3a --- /dev/null +++ b/public/overlays/cast_resist_fire.json @@ -0,0 +1,116 @@ +{ + "name": "cast_resistfire", + "celFile": "AuraResistFireFrontCast", + "width": 512, + "height": 137, + "directions": 1, + "frames": 11, + "framesPerDirection": 11, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -59, + "top": -24, + "width": 119, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 119, + 45, + -59, + -24 + ], + [ + 120, + 0, + 119, + 45, + -59, + -24 + ], + [ + 240, + 0, + 119, + 45, + -59, + -24 + ], + [ + 360, + 0, + 119, + 45, + -59, + -24 + ], + [ + 0, + 46, + 119, + 45, + -59, + -24 + ], + [ + 120, + 46, + 119, + 45, + -59, + -24 + ], + [ + 240, + 46, + 119, + 45, + -59, + -24 + ], + [ + 360, + 46, + 119, + 45, + -59, + -24 + ], + [ + 0, + 92, + 119, + 45, + -59, + -24 + ], + [ + 120, + 92, + 119, + 45, + -59, + -24 + ], + [ + 240, + 92, + 119, + 45, + -59, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/cast_resist_fire.png b/public/overlays/cast_resist_fire.png new file mode 100644 index 0000000..f08e7fa Binary files /dev/null and b/public/overlays/cast_resist_fire.png differ diff --git a/public/overlays/cast_resist_light.json b/public/overlays/cast_resist_light.json new file mode 100644 index 0000000..5ee1ea5 --- /dev/null +++ b/public/overlays/cast_resist_light.json @@ -0,0 +1,116 @@ +{ + "name": "cast_resistlight", + "celFile": "AuraResistLightningBackCast", + "width": 512, + "height": 137, + "directions": 1, + "frames": 11, + "framesPerDirection": 11, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -59, + "top": -24, + "width": 119, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 119, + 45, + -59, + -24 + ], + [ + 120, + 0, + 119, + 45, + -59, + -24 + ], + [ + 240, + 0, + 119, + 45, + -59, + -24 + ], + [ + 360, + 0, + 119, + 45, + -59, + -24 + ], + [ + 0, + 46, + 119, + 45, + -59, + -24 + ], + [ + 120, + 46, + 119, + 45, + -59, + -24 + ], + [ + 240, + 46, + 119, + 45, + -59, + -24 + ], + [ + 360, + 46, + 119, + 45, + -59, + -24 + ], + [ + 0, + 92, + 119, + 45, + -59, + -24 + ], + [ + 120, + 92, + 119, + 45, + -59, + -24 + ], + [ + 240, + 92, + 119, + 45, + -59, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/cast_resist_light.png b/public/overlays/cast_resist_light.png new file mode 100644 index 0000000..670422e Binary files /dev/null and b/public/overlays/cast_resist_light.png differ diff --git a/public/overlays/cast_resistall.json b/public/overlays/cast_resistall.json new file mode 100644 index 0000000..e300cb1 --- /dev/null +++ b/public/overlays/cast_resistall.json @@ -0,0 +1,188 @@ +{ + "name": "cast_resistall", + "celFile": "AuraResistAllCast", + "width": 512, + "height": 179, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -47, + "top": -24, + "width": 90, + "height": 44 + }, + "groups": [ + [ + [ + 0, + 0, + 90, + 44, + -47, + -24 + ], + [ + 91, + 0, + 90, + 44, + -47, + -24 + ], + [ + 182, + 0, + 90, + 44, + -47, + -24 + ], + [ + 273, + 0, + 90, + 44, + -47, + -24 + ], + [ + 364, + 0, + 90, + 44, + -47, + -24 + ], + [ + 0, + 45, + 90, + 44, + -47, + -24 + ], + [ + 91, + 45, + 90, + 44, + -47, + -24 + ], + [ + 182, + 45, + 90, + 44, + -47, + -24 + ], + [ + 273, + 45, + 90, + 44, + -47, + -24 + ], + [ + 364, + 45, + 90, + 44, + -47, + -24 + ], + [ + 0, + 90, + 90, + 44, + -47, + -24 + ], + [ + 91, + 90, + 90, + 44, + -47, + -24 + ], + [ + 182, + 90, + 90, + 44, + -47, + -24 + ], + [ + 273, + 90, + 90, + 44, + -47, + -24 + ], + [ + 364, + 90, + 90, + 44, + -47, + -24 + ], + [ + 0, + 135, + 90, + 44, + -47, + -24 + ], + [ + 91, + 135, + 90, + 44, + -47, + -24 + ], + [ + 182, + 135, + 90, + 44, + -47, + -24 + ], + [ + 273, + 135, + 90, + 44, + -47, + -24 + ], + [ + 364, + 135, + 90, + 44, + -47, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/cast_resistall.png b/public/overlays/cast_resistall.png new file mode 100644 index 0000000..f4fbfb5 Binary files /dev/null and b/public/overlays/cast_resistall.png differ diff --git a/public/overlays/cast_resistcold.json b/public/overlays/cast_resistcold.json new file mode 100644 index 0000000..10bb4ab --- /dev/null +++ b/public/overlays/cast_resistcold.json @@ -0,0 +1,116 @@ +{ + "name": "cast_resistcold", + "celFile": "AuraResistColdBackCast", + "width": 512, + "height": 137, + "directions": 1, + "frames": 11, + "framesPerDirection": 11, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -62, + "top": -24, + "width": 123, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 123, + 45, + -62, + -24 + ], + [ + 124, + 0, + 123, + 45, + -62, + -24 + ], + [ + 248, + 0, + 123, + 45, + -62, + -24 + ], + [ + 372, + 0, + 123, + 45, + -62, + -24 + ], + [ + 0, + 46, + 123, + 45, + -62, + -24 + ], + [ + 124, + 46, + 123, + 45, + -62, + -24 + ], + [ + 248, + 46, + 123, + 45, + -62, + -24 + ], + [ + 372, + 46, + 123, + 45, + -62, + -24 + ], + [ + 0, + 92, + 123, + 45, + -62, + -24 + ], + [ + 124, + 92, + 123, + 45, + -62, + -24 + ], + [ + 248, + 92, + 123, + 45, + -62, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/cast_resistcold.png b/public/overlays/cast_resistcold.png new file mode 100644 index 0000000..3afb276 Binary files /dev/null and b/public/overlays/cast_resistcold.png differ diff --git a/public/overlays/cast_resistfire.json b/public/overlays/cast_resistfire.json new file mode 100644 index 0000000..8418f3a --- /dev/null +++ b/public/overlays/cast_resistfire.json @@ -0,0 +1,116 @@ +{ + "name": "cast_resistfire", + "celFile": "AuraResistFireFrontCast", + "width": 512, + "height": 137, + "directions": 1, + "frames": 11, + "framesPerDirection": 11, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -59, + "top": -24, + "width": 119, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 119, + 45, + -59, + -24 + ], + [ + 120, + 0, + 119, + 45, + -59, + -24 + ], + [ + 240, + 0, + 119, + 45, + -59, + -24 + ], + [ + 360, + 0, + 119, + 45, + -59, + -24 + ], + [ + 0, + 46, + 119, + 45, + -59, + -24 + ], + [ + 120, + 46, + 119, + 45, + -59, + -24 + ], + [ + 240, + 46, + 119, + 45, + -59, + -24 + ], + [ + 360, + 46, + 119, + 45, + -59, + -24 + ], + [ + 0, + 92, + 119, + 45, + -59, + -24 + ], + [ + 120, + 92, + 119, + 45, + -59, + -24 + ], + [ + 240, + 92, + 119, + 45, + -59, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/cast_resistfire.png b/public/overlays/cast_resistfire.png new file mode 100644 index 0000000..f08e7fa Binary files /dev/null and b/public/overlays/cast_resistfire.png differ diff --git a/public/overlays/cast_resistlight.json b/public/overlays/cast_resistlight.json new file mode 100644 index 0000000..5ee1ea5 --- /dev/null +++ b/public/overlays/cast_resistlight.json @@ -0,0 +1,116 @@ +{ + "name": "cast_resistlight", + "celFile": "AuraResistLightningBackCast", + "width": 512, + "height": 137, + "directions": 1, + "frames": 11, + "framesPerDirection": 11, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -59, + "top": -24, + "width": 119, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 119, + 45, + -59, + -24 + ], + [ + 120, + 0, + 119, + 45, + -59, + -24 + ], + [ + 240, + 0, + 119, + 45, + -59, + -24 + ], + [ + 360, + 0, + 119, + 45, + -59, + -24 + ], + [ + 0, + 46, + 119, + 45, + -59, + -24 + ], + [ + 120, + 46, + 119, + 45, + -59, + -24 + ], + [ + 240, + 46, + 119, + 45, + -59, + -24 + ], + [ + 360, + 46, + 119, + 45, + -59, + -24 + ], + [ + 0, + 92, + 119, + 45, + -59, + -24 + ], + [ + 120, + 92, + 119, + 45, + -59, + -24 + ], + [ + 240, + 92, + 119, + 45, + -59, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/cast_resistlight.png b/public/overlays/cast_resistlight.png new file mode 100644 index 0000000..670422e Binary files /dev/null and b/public/overlays/cast_resistlight.png differ diff --git a/public/overlays/cast_undead.json b/public/overlays/cast_undead.json new file mode 100644 index 0000000..221db5f --- /dev/null +++ b/public/overlays/cast_undead.json @@ -0,0 +1,156 @@ +{ + "name": "holy_bolt_cast", + "celFile": "HolyBoltCloud", + "width": 1024, + "height": 519, + "directions": 1, + "frames": 16, + "framesPerDirection": 16, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -93, + "top": -110, + "width": 183, + "height": 129 + }, + "groups": [ + [ + [ + 0, + 0, + 183, + 129, + -93, + -110 + ], + [ + 184, + 0, + 183, + 129, + -93, + -110 + ], + [ + 368, + 0, + 183, + 129, + -93, + -110 + ], + [ + 552, + 0, + 183, + 129, + -93, + -110 + ], + [ + 736, + 0, + 183, + 129, + -93, + -110 + ], + [ + 0, + 130, + 183, + 129, + -93, + -110 + ], + [ + 184, + 130, + 183, + 129, + -93, + -110 + ], + [ + 368, + 130, + 183, + 129, + -93, + -110 + ], + [ + 552, + 130, + 183, + 129, + -93, + -110 + ], + [ + 736, + 130, + 183, + 129, + -93, + -110 + ], + [ + 0, + 260, + 183, + 129, + -93, + -110 + ], + [ + 184, + 260, + 183, + 129, + -93, + -110 + ], + [ + 368, + 260, + 183, + 129, + -93, + -110 + ], + [ + 552, + 260, + 183, + 129, + -93, + -110 + ], + [ + 736, + 260, + 183, + 129, + -93, + -110 + ], + [ + 0, + 390, + 183, + 129, + -93, + -110 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/cast_undead.png b/public/overlays/cast_undead.png new file mode 100644 index 0000000..9ac6f86 Binary files /dev/null and b/public/overlays/cast_undead.png differ diff --git a/public/overlays/charge.json b/public/overlays/charge.json new file mode 100644 index 0000000..7cbc91b --- /dev/null +++ b/public/overlays/charge.json @@ -0,0 +1,92 @@ +{ + "name": "charge", + "celFile": "Charge", + "width": 512, + "height": 93, + "directions": 1, + "frames": 8, + "framesPerDirection": 8, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -32, + "top": -27, + "width": 65, + "height": 46 + }, + "groups": [ + [ + [ + 0, + 0, + 65, + 46, + -32, + -27 + ], + [ + 66, + 0, + 65, + 46, + -32, + -27 + ], + [ + 132, + 0, + 65, + 46, + -32, + -27 + ], + [ + 198, + 0, + 65, + 46, + -32, + -27 + ], + [ + 264, + 0, + 65, + 46, + -32, + -27 + ], + [ + 330, + 0, + 65, + 46, + -32, + -27 + ], + [ + 396, + 0, + 65, + 46, + -32, + -27 + ], + [ + 0, + 47, + 65, + 46, + -32, + -27 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/charge.png b/public/overlays/charge.png new file mode 100644 index 0000000..445572a Binary files /dev/null and b/public/overlays/charge.png differ diff --git a/public/overlays/conversion.json b/public/overlays/conversion.json new file mode 100644 index 0000000..3ab9007 --- /dev/null +++ b/public/overlays/conversion.json @@ -0,0 +1,108 @@ +{ + "name": "conversion", + "celFile": "Conversion", + "width": 512, + "height": 52, + "directions": 1, + "frames": 10, + "framesPerDirection": 10, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -23, + "top": -81, + "width": 46, + "height": 52 + }, + "groups": [ + [ + [ + 0, + 0, + 46, + 52, + -23, + -81 + ], + [ + 47, + 0, + 46, + 52, + -23, + -81 + ], + [ + 94, + 0, + 46, + 52, + -23, + -81 + ], + [ + 141, + 0, + 46, + 52, + -23, + -81 + ], + [ + 188, + 0, + 46, + 52, + -23, + -81 + ], + [ + 235, + 0, + 46, + 52, + -23, + -81 + ], + [ + 282, + 0, + 46, + 52, + -23, + -81 + ], + [ + 329, + 0, + 46, + 52, + -23, + -81 + ], + [ + 376, + 0, + 46, + 52, + -23, + -81 + ], + [ + 423, + 0, + 46, + 52, + -23, + -81 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/conversion.png b/public/overlays/conversion.png new file mode 100644 index 0000000..199302e Binary files /dev/null and b/public/overlays/conversion.png differ diff --git a/public/overlays/conversion_aura.json b/public/overlays/conversion_aura.json new file mode 100644 index 0000000..3ab9007 --- /dev/null +++ b/public/overlays/conversion_aura.json @@ -0,0 +1,108 @@ +{ + "name": "conversion", + "celFile": "Conversion", + "width": 512, + "height": 52, + "directions": 1, + "frames": 10, + "framesPerDirection": 10, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -23, + "top": -81, + "width": 46, + "height": 52 + }, + "groups": [ + [ + [ + 0, + 0, + 46, + 52, + -23, + -81 + ], + [ + 47, + 0, + 46, + 52, + -23, + -81 + ], + [ + 94, + 0, + 46, + 52, + -23, + -81 + ], + [ + 141, + 0, + 46, + 52, + -23, + -81 + ], + [ + 188, + 0, + 46, + 52, + -23, + -81 + ], + [ + 235, + 0, + 46, + 52, + -23, + -81 + ], + [ + 282, + 0, + 46, + 52, + -23, + -81 + ], + [ + 329, + 0, + 46, + 52, + -23, + -81 + ], + [ + 376, + 0, + 46, + 52, + -23, + -81 + ], + [ + 423, + 0, + 46, + 52, + -23, + -81 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/conversion_aura.png b/public/overlays/conversion_aura.png new file mode 100644 index 0000000..199302e Binary files /dev/null and b/public/overlays/conversion_aura.png differ diff --git a/public/overlays/conversion_cast.json b/public/overlays/conversion_cast.json new file mode 100644 index 0000000..fe8b060 --- /dev/null +++ b/public/overlays/conversion_cast.json @@ -0,0 +1,116 @@ +{ + "name": "conversioncast", + "celFile": "AuraResistColdBackCast", + "width": 512, + "height": 137, + "directions": 1, + "frames": 11, + "framesPerDirection": 11, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -62, + "top": -24, + "width": 123, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 123, + 45, + -62, + -24 + ], + [ + 124, + 0, + 123, + 45, + -62, + -24 + ], + [ + 248, + 0, + 123, + 45, + -62, + -24 + ], + [ + 372, + 0, + 123, + 45, + -62, + -24 + ], + [ + 0, + 46, + 123, + 45, + -62, + -24 + ], + [ + 124, + 46, + 123, + 45, + -62, + -24 + ], + [ + 248, + 46, + 123, + 45, + -62, + -24 + ], + [ + 372, + 46, + 123, + 45, + -62, + -24 + ], + [ + 0, + 92, + 123, + 45, + -62, + -24 + ], + [ + 124, + 92, + 123, + 45, + -62, + -24 + ], + [ + 248, + 92, + 123, + 45, + -62, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/conversion_cast.png b/public/overlays/conversion_cast.png new file mode 100644 index 0000000..3afb276 Binary files /dev/null and b/public/overlays/conversion_cast.png differ diff --git a/public/overlays/conversionaura.json b/public/overlays/conversionaura.json new file mode 100644 index 0000000..3ab9007 --- /dev/null +++ b/public/overlays/conversionaura.json @@ -0,0 +1,108 @@ +{ + "name": "conversion", + "celFile": "Conversion", + "width": 512, + "height": 52, + "directions": 1, + "frames": 10, + "framesPerDirection": 10, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -23, + "top": -81, + "width": 46, + "height": 52 + }, + "groups": [ + [ + [ + 0, + 0, + 46, + 52, + -23, + -81 + ], + [ + 47, + 0, + 46, + 52, + -23, + -81 + ], + [ + 94, + 0, + 46, + 52, + -23, + -81 + ], + [ + 141, + 0, + 46, + 52, + -23, + -81 + ], + [ + 188, + 0, + 46, + 52, + -23, + -81 + ], + [ + 235, + 0, + 46, + 52, + -23, + -81 + ], + [ + 282, + 0, + 46, + 52, + -23, + -81 + ], + [ + 329, + 0, + 46, + 52, + -23, + -81 + ], + [ + 376, + 0, + 46, + 52, + -23, + -81 + ], + [ + 423, + 0, + 46, + 52, + -23, + -81 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/conversionaura.png b/public/overlays/conversionaura.png new file mode 100644 index 0000000..199302e Binary files /dev/null and b/public/overlays/conversionaura.png differ diff --git a/public/overlays/conversioncast.json b/public/overlays/conversioncast.json new file mode 100644 index 0000000..fe8b060 --- /dev/null +++ b/public/overlays/conversioncast.json @@ -0,0 +1,116 @@ +{ + "name": "conversioncast", + "celFile": "AuraResistColdBackCast", + "width": 512, + "height": 137, + "directions": 1, + "frames": 11, + "framesPerDirection": 11, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -62, + "top": -24, + "width": 123, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 123, + 45, + -62, + -24 + ], + [ + 124, + 0, + 123, + 45, + -62, + -24 + ], + [ + 248, + 0, + 123, + 45, + -62, + -24 + ], + [ + 372, + 0, + 123, + 45, + -62, + -24 + ], + [ + 0, + 46, + 123, + 45, + -62, + -24 + ], + [ + 124, + 46, + 123, + 45, + -62, + -24 + ], + [ + 248, + 46, + 123, + 45, + -62, + -24 + ], + [ + 372, + 46, + 123, + 45, + -62, + -24 + ], + [ + 0, + 92, + 123, + 45, + -62, + -24 + ], + [ + 124, + 92, + 123, + 45, + -62, + -24 + ], + [ + 248, + 92, + 123, + 45, + -62, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/conversioncast.png b/public/overlays/conversioncast.png new file mode 100644 index 0000000..3afb276 Binary files /dev/null and b/public/overlays/conversioncast.png differ diff --git a/public/overlays/fist_of_the_heavens_cast.json b/public/overlays/fist_of_the_heavens_cast.json new file mode 100644 index 0000000..d9fe864 --- /dev/null +++ b/public/overlays/fist_of_the_heavens_cast.json @@ -0,0 +1,188 @@ +{ + "name": "fist_of_the_heavens_cast", + "celFile": "FOACast", + "width": 1024, + "height": 326, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -56, + "top": -120, + "width": 108, + "height": 108 + }, + "groups": [ + [ + [ + 0, + 0, + 108, + 108, + -56, + -120 + ], + [ + 109, + 0, + 108, + 108, + -56, + -120 + ], + [ + 218, + 0, + 108, + 108, + -56, + -120 + ], + [ + 327, + 0, + 108, + 108, + -56, + -120 + ], + [ + 436, + 0, + 108, + 108, + -56, + -120 + ], + [ + 545, + 0, + 108, + 108, + -56, + -120 + ], + [ + 654, + 0, + 108, + 108, + -56, + -120 + ], + [ + 763, + 0, + 108, + 108, + -56, + -120 + ], + [ + 872, + 0, + 108, + 108, + -56, + -120 + ], + [ + 0, + 109, + 108, + 108, + -56, + -120 + ], + [ + 109, + 109, + 108, + 108, + -56, + -120 + ], + [ + 218, + 109, + 108, + 108, + -56, + -120 + ], + [ + 327, + 109, + 108, + 108, + -56, + -120 + ], + [ + 436, + 109, + 108, + 108, + -56, + -120 + ], + [ + 545, + 109, + 108, + 108, + -56, + -120 + ], + [ + 654, + 109, + 108, + 108, + -56, + -120 + ], + [ + 763, + 109, + 108, + 108, + -56, + -120 + ], + [ + 872, + 109, + 108, + 108, + -56, + -120 + ], + [ + 0, + 218, + 108, + 108, + -56, + -120 + ], + [ + 109, + 218, + 108, + 108, + -56, + -120 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/fist_of_the_heavens_cast.png b/public/overlays/fist_of_the_heavens_cast.png new file mode 100644 index 0000000..bcb345c Binary files /dev/null and b/public/overlays/fist_of_the_heavens_cast.png differ diff --git a/public/overlays/fist_of_the_heavens_hit.json b/public/overlays/fist_of_the_heavens_hit.json new file mode 100644 index 0000000..3daa49a --- /dev/null +++ b/public/overlays/fist_of_the_heavens_hit.json @@ -0,0 +1,196 @@ +{ + "name": "handofgod", + "celFile": "HolyShockHit", + "width": 1024, + "height": 513, + "directions": 1, + "frames": 21, + "framesPerDirection": 21, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -29, + "top": -240, + "width": 62, + "height": 256 + }, + "groups": [ + [ + [ + 0, + 0, + 62, + 256, + -29, + -240 + ], + [ + 63, + 0, + 62, + 256, + -29, + -240 + ], + [ + 126, + 0, + 62, + 256, + -29, + -240 + ], + [ + 189, + 0, + 62, + 256, + -29, + -240 + ], + [ + 252, + 0, + 62, + 256, + -29, + -240 + ], + [ + 315, + 0, + 62, + 256, + -29, + -240 + ], + [ + 378, + 0, + 62, + 256, + -29, + -240 + ], + [ + 441, + 0, + 62, + 256, + -29, + -240 + ], + [ + 504, + 0, + 62, + 256, + -29, + -240 + ], + [ + 567, + 0, + 62, + 256, + -29, + -240 + ], + [ + 630, + 0, + 62, + 256, + -29, + -240 + ], + [ + 693, + 0, + 62, + 256, + -29, + -240 + ], + [ + 756, + 0, + 62, + 256, + -29, + -240 + ], + [ + 819, + 0, + 62, + 256, + -29, + -240 + ], + [ + 882, + 0, + 62, + 256, + -29, + -240 + ], + [ + 945, + 0, + 62, + 256, + -29, + -240 + ], + [ + 0, + 257, + 62, + 256, + -29, + -240 + ], + [ + 63, + 257, + 62, + 256, + -29, + -240 + ], + [ + 126, + 257, + 62, + 256, + -29, + -240 + ], + [ + 189, + 257, + 62, + 256, + -29, + -240 + ], + [ + 252, + 257, + 62, + 256, + -29, + -240 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/fist_of_the_heavens_hit.png b/public/overlays/fist_of_the_heavens_hit.png new file mode 100644 index 0000000..9bd69f7 Binary files /dev/null and b/public/overlays/fist_of_the_heavens_hit.png differ diff --git a/public/overlays/fistoftheheavenscast.json b/public/overlays/fistoftheheavenscast.json new file mode 100644 index 0000000..d9fe864 --- /dev/null +++ b/public/overlays/fistoftheheavenscast.json @@ -0,0 +1,188 @@ +{ + "name": "fist_of_the_heavens_cast", + "celFile": "FOACast", + "width": 1024, + "height": 326, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -56, + "top": -120, + "width": 108, + "height": 108 + }, + "groups": [ + [ + [ + 0, + 0, + 108, + 108, + -56, + -120 + ], + [ + 109, + 0, + 108, + 108, + -56, + -120 + ], + [ + 218, + 0, + 108, + 108, + -56, + -120 + ], + [ + 327, + 0, + 108, + 108, + -56, + -120 + ], + [ + 436, + 0, + 108, + 108, + -56, + -120 + ], + [ + 545, + 0, + 108, + 108, + -56, + -120 + ], + [ + 654, + 0, + 108, + 108, + -56, + -120 + ], + [ + 763, + 0, + 108, + 108, + -56, + -120 + ], + [ + 872, + 0, + 108, + 108, + -56, + -120 + ], + [ + 0, + 109, + 108, + 108, + -56, + -120 + ], + [ + 109, + 109, + 108, + 108, + -56, + -120 + ], + [ + 218, + 109, + 108, + 108, + -56, + -120 + ], + [ + 327, + 109, + 108, + 108, + -56, + -120 + ], + [ + 436, + 109, + 108, + 108, + -56, + -120 + ], + [ + 545, + 109, + 108, + 108, + -56, + -120 + ], + [ + 654, + 109, + 108, + 108, + -56, + -120 + ], + [ + 763, + 109, + 108, + 108, + -56, + -120 + ], + [ + 872, + 109, + 108, + 108, + -56, + -120 + ], + [ + 0, + 218, + 108, + 108, + -56, + -120 + ], + [ + 109, + 218, + 108, + 108, + -56, + -120 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/fistoftheheavenscast.png b/public/overlays/fistoftheheavenscast.png new file mode 100644 index 0000000..bcb345c Binary files /dev/null and b/public/overlays/fistoftheheavenscast.png differ diff --git a/public/overlays/fistoftheheavenshit.json b/public/overlays/fistoftheheavenshit.json new file mode 100644 index 0000000..3daa49a --- /dev/null +++ b/public/overlays/fistoftheheavenshit.json @@ -0,0 +1,196 @@ +{ + "name": "handofgod", + "celFile": "HolyShockHit", + "width": 1024, + "height": 513, + "directions": 1, + "frames": 21, + "framesPerDirection": 21, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -29, + "top": -240, + "width": 62, + "height": 256 + }, + "groups": [ + [ + [ + 0, + 0, + 62, + 256, + -29, + -240 + ], + [ + 63, + 0, + 62, + 256, + -29, + -240 + ], + [ + 126, + 0, + 62, + 256, + -29, + -240 + ], + [ + 189, + 0, + 62, + 256, + -29, + -240 + ], + [ + 252, + 0, + 62, + 256, + -29, + -240 + ], + [ + 315, + 0, + 62, + 256, + -29, + -240 + ], + [ + 378, + 0, + 62, + 256, + -29, + -240 + ], + [ + 441, + 0, + 62, + 256, + -29, + -240 + ], + [ + 504, + 0, + 62, + 256, + -29, + -240 + ], + [ + 567, + 0, + 62, + 256, + -29, + -240 + ], + [ + 630, + 0, + 62, + 256, + -29, + -240 + ], + [ + 693, + 0, + 62, + 256, + -29, + -240 + ], + [ + 756, + 0, + 62, + 256, + -29, + -240 + ], + [ + 819, + 0, + 62, + 256, + -29, + -240 + ], + [ + 882, + 0, + 62, + 256, + -29, + -240 + ], + [ + 945, + 0, + 62, + 256, + -29, + -240 + ], + [ + 0, + 257, + 62, + 256, + -29, + -240 + ], + [ + 63, + 257, + 62, + 256, + -29, + -240 + ], + [ + 126, + 257, + 62, + 256, + -29, + -240 + ], + [ + 189, + 257, + 62, + 256, + -29, + -240 + ], + [ + 252, + 257, + 62, + 256, + -29, + -240 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/fistoftheheavenshit.png b/public/overlays/fistoftheheavenshit.png new file mode 100644 index 0000000..9bd69f7 Binary files /dev/null and b/public/overlays/fistoftheheavenshit.png differ diff --git a/public/overlays/foacast.json b/public/overlays/foacast.json new file mode 100644 index 0000000..d9fe864 --- /dev/null +++ b/public/overlays/foacast.json @@ -0,0 +1,188 @@ +{ + "name": "fist_of_the_heavens_cast", + "celFile": "FOACast", + "width": 1024, + "height": 326, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -56, + "top": -120, + "width": 108, + "height": 108 + }, + "groups": [ + [ + [ + 0, + 0, + 108, + 108, + -56, + -120 + ], + [ + 109, + 0, + 108, + 108, + -56, + -120 + ], + [ + 218, + 0, + 108, + 108, + -56, + -120 + ], + [ + 327, + 0, + 108, + 108, + -56, + -120 + ], + [ + 436, + 0, + 108, + 108, + -56, + -120 + ], + [ + 545, + 0, + 108, + 108, + -56, + -120 + ], + [ + 654, + 0, + 108, + 108, + -56, + -120 + ], + [ + 763, + 0, + 108, + 108, + -56, + -120 + ], + [ + 872, + 0, + 108, + 108, + -56, + -120 + ], + [ + 0, + 109, + 108, + 108, + -56, + -120 + ], + [ + 109, + 109, + 108, + 108, + -56, + -120 + ], + [ + 218, + 109, + 108, + 108, + -56, + -120 + ], + [ + 327, + 109, + 108, + 108, + -56, + -120 + ], + [ + 436, + 109, + 108, + 108, + -56, + -120 + ], + [ + 545, + 109, + 108, + 108, + -56, + -120 + ], + [ + 654, + 109, + 108, + 108, + -56, + -120 + ], + [ + 763, + 109, + 108, + 108, + -56, + -120 + ], + [ + 872, + 109, + 108, + 108, + -56, + -120 + ], + [ + 0, + 218, + 108, + 108, + -56, + -120 + ], + [ + 109, + 218, + 108, + 108, + -56, + -120 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/foacast.png b/public/overlays/foacast.png new file mode 100644 index 0000000..bcb345c Binary files /dev/null and b/public/overlays/foacast.png differ diff --git a/public/overlays/handofgod.json b/public/overlays/handofgod.json new file mode 100644 index 0000000..3daa49a --- /dev/null +++ b/public/overlays/handofgod.json @@ -0,0 +1,196 @@ +{ + "name": "handofgod", + "celFile": "HolyShockHit", + "width": 1024, + "height": 513, + "directions": 1, + "frames": 21, + "framesPerDirection": 21, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -29, + "top": -240, + "width": 62, + "height": 256 + }, + "groups": [ + [ + [ + 0, + 0, + 62, + 256, + -29, + -240 + ], + [ + 63, + 0, + 62, + 256, + -29, + -240 + ], + [ + 126, + 0, + 62, + 256, + -29, + -240 + ], + [ + 189, + 0, + 62, + 256, + -29, + -240 + ], + [ + 252, + 0, + 62, + 256, + -29, + -240 + ], + [ + 315, + 0, + 62, + 256, + -29, + -240 + ], + [ + 378, + 0, + 62, + 256, + -29, + -240 + ], + [ + 441, + 0, + 62, + 256, + -29, + -240 + ], + [ + 504, + 0, + 62, + 256, + -29, + -240 + ], + [ + 567, + 0, + 62, + 256, + -29, + -240 + ], + [ + 630, + 0, + 62, + 256, + -29, + -240 + ], + [ + 693, + 0, + 62, + 256, + -29, + -240 + ], + [ + 756, + 0, + 62, + 256, + -29, + -240 + ], + [ + 819, + 0, + 62, + 256, + -29, + -240 + ], + [ + 882, + 0, + 62, + 256, + -29, + -240 + ], + [ + 945, + 0, + 62, + 256, + -29, + -240 + ], + [ + 0, + 257, + 62, + 256, + -29, + -240 + ], + [ + 63, + 257, + 62, + 256, + -29, + -240 + ], + [ + 126, + 257, + 62, + 256, + -29, + -240 + ], + [ + 189, + 257, + 62, + 256, + -29, + -240 + ], + [ + 252, + 257, + 62, + 256, + -29, + -240 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/handofgod.png b/public/overlays/handofgod.png new file mode 100644 index 0000000..9bd69f7 Binary files /dev/null and b/public/overlays/handofgod.png differ diff --git a/public/overlays/hit_holyfire.json b/public/overlays/hit_holyfire.json new file mode 100644 index 0000000..e127638 --- /dev/null +++ b/public/overlays/hit_holyfire.json @@ -0,0 +1,172 @@ +{ + "name": "holy_fire_hit", + "celFile": "AuraHolyFireHit", + "width": 512, + "height": 179, + "directions": 1, + "frames": 18, + "framesPerDirection": 18, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -42, + "top": -58, + "width": 84, + "height": 59 + }, + "groups": [ + [ + [ + 0, + 0, + 84, + 59, + -42, + -58 + ], + [ + 85, + 0, + 84, + 59, + -42, + -58 + ], + [ + 170, + 0, + 84, + 59, + -42, + -58 + ], + [ + 255, + 0, + 84, + 59, + -42, + -58 + ], + [ + 340, + 0, + 84, + 59, + -42, + -58 + ], + [ + 425, + 0, + 84, + 59, + -42, + -58 + ], + [ + 0, + 60, + 84, + 59, + -42, + -58 + ], + [ + 85, + 60, + 84, + 59, + -42, + -58 + ], + [ + 170, + 60, + 84, + 59, + -42, + -58 + ], + [ + 255, + 60, + 84, + 59, + -42, + -58 + ], + [ + 340, + 60, + 84, + 59, + -42, + -58 + ], + [ + 425, + 60, + 84, + 59, + -42, + -58 + ], + [ + 0, + 120, + 84, + 59, + -42, + -58 + ], + [ + 85, + 120, + 84, + 59, + -42, + -58 + ], + [ + 170, + 120, + 84, + 59, + -42, + -58 + ], + [ + 255, + 120, + 84, + 59, + -42, + -58 + ], + [ + 340, + 120, + 84, + 59, + -42, + -58 + ], + [ + 425, + 120, + 84, + 59, + -42, + -58 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/hit_holyfire.png b/public/overlays/hit_holyfire.png new file mode 100644 index 0000000..d92e01c Binary files /dev/null and b/public/overlays/hit_holyfire.png differ diff --git a/public/overlays/hit_thorns.json b/public/overlays/hit_thorns.json new file mode 100644 index 0000000..7aee358 --- /dev/null +++ b/public/overlays/hit_thorns.json @@ -0,0 +1,108 @@ +{ + "name": "thorns_hit", + "celFile": "AuraThornsHit", + "width": 512, + "height": 129, + "directions": 1, + "frames": 10, + "framesPerDirection": 10, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -30, + "top": -63, + "width": 60, + "height": 64 + }, + "groups": [ + [ + [ + 0, + 0, + 60, + 64, + -30, + -63 + ], + [ + 61, + 0, + 60, + 64, + -30, + -63 + ], + [ + 122, + 0, + 60, + 64, + -30, + -63 + ], + [ + 183, + 0, + 60, + 64, + -30, + -63 + ], + [ + 244, + 0, + 60, + 64, + -30, + -63 + ], + [ + 305, + 0, + 60, + 64, + -30, + -63 + ], + [ + 366, + 0, + 60, + 64, + -30, + -63 + ], + [ + 427, + 0, + 60, + 64, + -30, + -63 + ], + [ + 0, + 65, + 60, + 64, + -30, + -63 + ], + [ + 61, + 65, + 60, + 64, + -30, + -63 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/hit_thorns.png b/public/overlays/hit_thorns.png new file mode 100644 index 0000000..8c7e86f Binary files /dev/null and b/public/overlays/hit_thorns.png differ diff --git a/public/overlays/holy_bolt_cast.json b/public/overlays/holy_bolt_cast.json new file mode 100644 index 0000000..221db5f --- /dev/null +++ b/public/overlays/holy_bolt_cast.json @@ -0,0 +1,156 @@ +{ + "name": "holy_bolt_cast", + "celFile": "HolyBoltCloud", + "width": 1024, + "height": 519, + "directions": 1, + "frames": 16, + "framesPerDirection": 16, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -93, + "top": -110, + "width": 183, + "height": 129 + }, + "groups": [ + [ + [ + 0, + 0, + 183, + 129, + -93, + -110 + ], + [ + 184, + 0, + 183, + 129, + -93, + -110 + ], + [ + 368, + 0, + 183, + 129, + -93, + -110 + ], + [ + 552, + 0, + 183, + 129, + -93, + -110 + ], + [ + 736, + 0, + 183, + 129, + -93, + -110 + ], + [ + 0, + 130, + 183, + 129, + -93, + -110 + ], + [ + 184, + 130, + 183, + 129, + -93, + -110 + ], + [ + 368, + 130, + 183, + 129, + -93, + -110 + ], + [ + 552, + 130, + 183, + 129, + -93, + -110 + ], + [ + 736, + 130, + 183, + 129, + -93, + -110 + ], + [ + 0, + 260, + 183, + 129, + -93, + -110 + ], + [ + 184, + 260, + 183, + 129, + -93, + -110 + ], + [ + 368, + 260, + 183, + 129, + -93, + -110 + ], + [ + 552, + 260, + 183, + 129, + -93, + -110 + ], + [ + 736, + 260, + 183, + 129, + -93, + -110 + ], + [ + 0, + 390, + 183, + 129, + -93, + -110 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/holy_bolt_cast.png b/public/overlays/holy_bolt_cast.png new file mode 100644 index 0000000..9ac6f86 Binary files /dev/null and b/public/overlays/holy_bolt_cast.png differ diff --git a/public/overlays/holy_fire_hit.json b/public/overlays/holy_fire_hit.json new file mode 100644 index 0000000..e127638 --- /dev/null +++ b/public/overlays/holy_fire_hit.json @@ -0,0 +1,172 @@ +{ + "name": "holy_fire_hit", + "celFile": "AuraHolyFireHit", + "width": 512, + "height": 179, + "directions": 1, + "frames": 18, + "framesPerDirection": 18, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -42, + "top": -58, + "width": 84, + "height": 59 + }, + "groups": [ + [ + [ + 0, + 0, + 84, + 59, + -42, + -58 + ], + [ + 85, + 0, + 84, + 59, + -42, + -58 + ], + [ + 170, + 0, + 84, + 59, + -42, + -58 + ], + [ + 255, + 0, + 84, + 59, + -42, + -58 + ], + [ + 340, + 0, + 84, + 59, + -42, + -58 + ], + [ + 425, + 0, + 84, + 59, + -42, + -58 + ], + [ + 0, + 60, + 84, + 59, + -42, + -58 + ], + [ + 85, + 60, + 84, + 59, + -42, + -58 + ], + [ + 170, + 60, + 84, + 59, + -42, + -58 + ], + [ + 255, + 60, + 84, + 59, + -42, + -58 + ], + [ + 340, + 60, + 84, + 59, + -42, + -58 + ], + [ + 425, + 60, + 84, + 59, + -42, + -58 + ], + [ + 0, + 120, + 84, + 59, + -42, + -58 + ], + [ + 85, + 120, + 84, + 59, + -42, + -58 + ], + [ + 170, + 120, + 84, + 59, + -42, + -58 + ], + [ + 255, + 120, + 84, + 59, + -42, + -58 + ], + [ + 340, + 120, + 84, + 59, + -42, + -58 + ], + [ + 425, + 120, + 84, + 59, + -42, + -58 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/holy_fire_hit.png b/public/overlays/holy_fire_hit.png new file mode 100644 index 0000000..d92e01c Binary files /dev/null and b/public/overlays/holy_fire_hit.png differ diff --git a/public/overlays/holy_fire_indicate.json b/public/overlays/holy_fire_indicate.json new file mode 100644 index 0000000..2292f35 --- /dev/null +++ b/public/overlays/holy_fire_indicate.json @@ -0,0 +1,180 @@ +{ + "name": "holy_fire_indicate", + "celFile": "AuraHfireIndicate", + "width": 512, + "height": 116, + "directions": 1, + "frames": 19, + "framesPerDirection": 19, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -32, + "top": -20, + "width": 64, + "height": 38 + }, + "groups": [ + [ + [ + 0, + 0, + 64, + 38, + -32, + -20 + ], + [ + 65, + 0, + 64, + 38, + -32, + -20 + ], + [ + 130, + 0, + 64, + 38, + -32, + -20 + ], + [ + 195, + 0, + 64, + 38, + -32, + -20 + ], + [ + 260, + 0, + 64, + 38, + -32, + -20 + ], + [ + 325, + 0, + 64, + 38, + -32, + -20 + ], + [ + 390, + 0, + 64, + 38, + -32, + -20 + ], + [ + 0, + 39, + 64, + 38, + -32, + -20 + ], + [ + 65, + 39, + 64, + 38, + -32, + -20 + ], + [ + 130, + 39, + 64, + 38, + -32, + -20 + ], + [ + 195, + 39, + 64, + 38, + -32, + -20 + ], + [ + 260, + 39, + 64, + 38, + -32, + -20 + ], + [ + 325, + 39, + 64, + 38, + -32, + -20 + ], + [ + 390, + 39, + 64, + 38, + -32, + -20 + ], + [ + 0, + 78, + 64, + 38, + -32, + -20 + ], + [ + 65, + 78, + 64, + 38, + -32, + -20 + ], + [ + 130, + 78, + 64, + 38, + -32, + -20 + ], + [ + 195, + 78, + 64, + 38, + -32, + -20 + ], + [ + 260, + 78, + 64, + 38, + -32, + -20 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/holy_fire_indicate.png b/public/overlays/holy_fire_indicate.png new file mode 100644 index 0000000..42ef50a Binary files /dev/null and b/public/overlays/holy_fire_indicate.png differ diff --git a/public/overlays/holybolt_cast.json b/public/overlays/holybolt_cast.json new file mode 100644 index 0000000..221db5f --- /dev/null +++ b/public/overlays/holybolt_cast.json @@ -0,0 +1,156 @@ +{ + "name": "holy_bolt_cast", + "celFile": "HolyBoltCloud", + "width": 1024, + "height": 519, + "directions": 1, + "frames": 16, + "framesPerDirection": 16, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -93, + "top": -110, + "width": 183, + "height": 129 + }, + "groups": [ + [ + [ + 0, + 0, + 183, + 129, + -93, + -110 + ], + [ + 184, + 0, + 183, + 129, + -93, + -110 + ], + [ + 368, + 0, + 183, + 129, + -93, + -110 + ], + [ + 552, + 0, + 183, + 129, + -93, + -110 + ], + [ + 736, + 0, + 183, + 129, + -93, + -110 + ], + [ + 0, + 130, + 183, + 129, + -93, + -110 + ], + [ + 184, + 130, + 183, + 129, + -93, + -110 + ], + [ + 368, + 130, + 183, + 129, + -93, + -110 + ], + [ + 552, + 130, + 183, + 129, + -93, + -110 + ], + [ + 736, + 130, + 183, + 129, + -93, + -110 + ], + [ + 0, + 260, + 183, + 129, + -93, + -110 + ], + [ + 184, + 260, + 183, + 129, + -93, + -110 + ], + [ + 368, + 260, + 183, + 129, + -93, + -110 + ], + [ + 552, + 260, + 183, + 129, + -93, + -110 + ], + [ + 736, + 260, + 183, + 129, + -93, + -110 + ], + [ + 0, + 390, + 183, + 129, + -93, + -110 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/holybolt_cast.png b/public/overlays/holybolt_cast.png new file mode 100644 index 0000000..9ac6f86 Binary files /dev/null and b/public/overlays/holybolt_cast.png differ diff --git a/public/overlays/holyboltcloud.json b/public/overlays/holyboltcloud.json new file mode 100644 index 0000000..221db5f --- /dev/null +++ b/public/overlays/holyboltcloud.json @@ -0,0 +1,156 @@ +{ + "name": "holy_bolt_cast", + "celFile": "HolyBoltCloud", + "width": 1024, + "height": 519, + "directions": 1, + "frames": 16, + "framesPerDirection": 16, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -93, + "top": -110, + "width": 183, + "height": 129 + }, + "groups": [ + [ + [ + 0, + 0, + 183, + 129, + -93, + -110 + ], + [ + 184, + 0, + 183, + 129, + -93, + -110 + ], + [ + 368, + 0, + 183, + 129, + -93, + -110 + ], + [ + 552, + 0, + 183, + 129, + -93, + -110 + ], + [ + 736, + 0, + 183, + 129, + -93, + -110 + ], + [ + 0, + 130, + 183, + 129, + -93, + -110 + ], + [ + 184, + 130, + 183, + 129, + -93, + -110 + ], + [ + 368, + 130, + 183, + 129, + -93, + -110 + ], + [ + 552, + 130, + 183, + 129, + -93, + -110 + ], + [ + 736, + 130, + 183, + 129, + -93, + -110 + ], + [ + 0, + 260, + 183, + 129, + -93, + -110 + ], + [ + 184, + 260, + 183, + 129, + -93, + -110 + ], + [ + 368, + 260, + 183, + 129, + -93, + -110 + ], + [ + 552, + 260, + 183, + 129, + -93, + -110 + ], + [ + 736, + 260, + 183, + 129, + -93, + -110 + ], + [ + 0, + 390, + 183, + 129, + -93, + -110 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/holyboltcloud.png b/public/overlays/holyboltcloud.png new file mode 100644 index 0000000..9ac6f86 Binary files /dev/null and b/public/overlays/holyboltcloud.png differ diff --git a/public/overlays/sanctuary_knockback.json b/public/overlays/sanctuary_knockback.json new file mode 100644 index 0000000..9bbf61e --- /dev/null +++ b/public/overlays/sanctuary_knockback.json @@ -0,0 +1,132 @@ +{ + "name": "sanctuary_knockback", + "celFile": "SanctuaryKnockback", + "width": 512, + "height": 362, + "directions": 1, + "frames": 13, + "framesPerDirection": 13, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -37, + "top": -96, + "width": 73, + "height": 120 + }, + "groups": [ + [ + [ + 0, + 0, + 73, + 120, + -37, + -96 + ], + [ + 74, + 0, + 73, + 120, + -37, + -96 + ], + [ + 148, + 0, + 73, + 120, + -37, + -96 + ], + [ + 222, + 0, + 73, + 120, + -37, + -96 + ], + [ + 296, + 0, + 73, + 120, + -37, + -96 + ], + [ + 370, + 0, + 73, + 120, + -37, + -96 + ], + [ + 0, + 121, + 73, + 120, + -37, + -96 + ], + [ + 74, + 121, + 73, + 120, + -37, + -96 + ], + [ + 148, + 121, + 73, + 120, + -37, + -96 + ], + [ + 222, + 121, + 73, + 120, + -37, + -96 + ], + [ + 296, + 121, + 73, + 120, + -37, + -96 + ], + [ + 370, + 121, + 73, + 120, + -37, + -96 + ], + [ + 0, + 242, + 73, + 120, + -37, + -96 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/sanctuary_knockback.png b/public/overlays/sanctuary_knockback.png new file mode 100644 index 0000000..9783887 Binary files /dev/null and b/public/overlays/sanctuary_knockback.png differ diff --git a/public/overlays/sanctuaryknockback.json b/public/overlays/sanctuaryknockback.json new file mode 100644 index 0000000..9bbf61e --- /dev/null +++ b/public/overlays/sanctuaryknockback.json @@ -0,0 +1,132 @@ +{ + "name": "sanctuary_knockback", + "celFile": "SanctuaryKnockback", + "width": 512, + "height": 362, + "directions": 1, + "frames": 13, + "framesPerDirection": 13, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -37, + "top": -96, + "width": 73, + "height": 120 + }, + "groups": [ + [ + [ + 0, + 0, + 73, + 120, + -37, + -96 + ], + [ + 74, + 0, + 73, + 120, + -37, + -96 + ], + [ + 148, + 0, + 73, + 120, + -37, + -96 + ], + [ + 222, + 0, + 73, + 120, + -37, + -96 + ], + [ + 296, + 0, + 73, + 120, + -37, + -96 + ], + [ + 370, + 0, + 73, + 120, + -37, + -96 + ], + [ + 0, + 121, + 73, + 120, + -37, + -96 + ], + [ + 74, + 121, + 73, + 120, + -37, + -96 + ], + [ + 148, + 121, + 73, + 120, + -37, + -96 + ], + [ + 222, + 121, + 73, + 120, + -37, + -96 + ], + [ + 296, + 121, + 73, + 120, + -37, + -96 + ], + [ + 370, + 121, + 73, + 120, + -37, + -96 + ], + [ + 0, + 242, + 73, + 120, + -37, + -96 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/sanctuaryknockback.png b/public/overlays/sanctuaryknockback.png new file mode 100644 index 0000000..9783887 Binary files /dev/null and b/public/overlays/sanctuaryknockback.png differ diff --git a/public/overlays/stun.json b/public/overlays/stun.json new file mode 100644 index 0000000..559a987 --- /dev/null +++ b/public/overlays/stun.json @@ -0,0 +1,124 @@ +{ + "name": "stun", + "celFile": "Stun", + "width": 512, + "height": 99, + "directions": 1, + "frames": 12, + "framesPerDirection": 12, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -34, + "top": -87, + "width": 69, + "height": 49 + }, + "groups": [ + [ + [ + 0, + 0, + 69, + 49, + -34, + -87 + ], + [ + 70, + 0, + 69, + 49, + -34, + -87 + ], + [ + 140, + 0, + 69, + 49, + -34, + -87 + ], + [ + 210, + 0, + 69, + 49, + -34, + -87 + ], + [ + 280, + 0, + 69, + 49, + -34, + -87 + ], + [ + 350, + 0, + 69, + 49, + -34, + -87 + ], + [ + 420, + 0, + 69, + 49, + -34, + -87 + ], + [ + 0, + 50, + 69, + 49, + -34, + -87 + ], + [ + 70, + 50, + 69, + 49, + -34, + -87 + ], + [ + 140, + 50, + 69, + 49, + -34, + -87 + ], + [ + 210, + 50, + 69, + 49, + -34, + -87 + ], + [ + 280, + 50, + 69, + 49, + -34, + -87 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/stun.png b/public/overlays/stun.png new file mode 100644 index 0000000..084d84f Binary files /dev/null and b/public/overlays/stun.png differ diff --git a/public/overlays/target_holyfire.json b/public/overlays/target_holyfire.json new file mode 100644 index 0000000..2292f35 --- /dev/null +++ b/public/overlays/target_holyfire.json @@ -0,0 +1,180 @@ +{ + "name": "holy_fire_indicate", + "celFile": "AuraHfireIndicate", + "width": 512, + "height": 116, + "directions": 1, + "frames": 19, + "framesPerDirection": 19, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -32, + "top": -20, + "width": 64, + "height": 38 + }, + "groups": [ + [ + [ + 0, + 0, + 64, + 38, + -32, + -20 + ], + [ + 65, + 0, + 64, + 38, + -32, + -20 + ], + [ + 130, + 0, + 64, + 38, + -32, + -20 + ], + [ + 195, + 0, + 64, + 38, + -32, + -20 + ], + [ + 260, + 0, + 64, + 38, + -32, + -20 + ], + [ + 325, + 0, + 64, + 38, + -32, + -20 + ], + [ + 390, + 0, + 64, + 38, + -32, + -20 + ], + [ + 0, + 39, + 64, + 38, + -32, + -20 + ], + [ + 65, + 39, + 64, + 38, + -32, + -20 + ], + [ + 130, + 39, + 64, + 38, + -32, + -20 + ], + [ + 195, + 39, + 64, + 38, + -32, + -20 + ], + [ + 260, + 39, + 64, + 38, + -32, + -20 + ], + [ + 325, + 39, + 64, + 38, + -32, + -20 + ], + [ + 390, + 39, + 64, + 38, + -32, + -20 + ], + [ + 0, + 78, + 64, + 38, + -32, + -20 + ], + [ + 65, + 78, + 64, + 38, + -32, + -20 + ], + [ + 130, + 78, + 64, + 38, + -32, + -20 + ], + [ + 195, + 78, + 64, + 38, + -32, + -20 + ], + [ + 260, + 78, + 64, + 38, + -32, + -20 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/target_holyfire.png b/public/overlays/target_holyfire.png new file mode 100644 index 0000000..42ef50a Binary files /dev/null and b/public/overlays/target_holyfire.png differ diff --git a/public/overlays/target_thorns.json b/public/overlays/target_thorns.json new file mode 100644 index 0000000..ada46c6 --- /dev/null +++ b/public/overlays/target_thorns.json @@ -0,0 +1,180 @@ +{ + "name": "thorns_indicate", + "celFile": "AuraHfireIndicate", + "width": 512, + "height": 116, + "directions": 1, + "frames": 19, + "framesPerDirection": 19, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -32, + "top": -20, + "width": 64, + "height": 38 + }, + "groups": [ + [ + [ + 0, + 0, + 64, + 38, + -32, + -20 + ], + [ + 65, + 0, + 64, + 38, + -32, + -20 + ], + [ + 130, + 0, + 64, + 38, + -32, + -20 + ], + [ + 195, + 0, + 64, + 38, + -32, + -20 + ], + [ + 260, + 0, + 64, + 38, + -32, + -20 + ], + [ + 325, + 0, + 64, + 38, + -32, + -20 + ], + [ + 390, + 0, + 64, + 38, + -32, + -20 + ], + [ + 0, + 39, + 64, + 38, + -32, + -20 + ], + [ + 65, + 39, + 64, + 38, + -32, + -20 + ], + [ + 130, + 39, + 64, + 38, + -32, + -20 + ], + [ + 195, + 39, + 64, + 38, + -32, + -20 + ], + [ + 260, + 39, + 64, + 38, + -32, + -20 + ], + [ + 325, + 39, + 64, + 38, + -32, + -20 + ], + [ + 390, + 39, + 64, + 38, + -32, + -20 + ], + [ + 0, + 78, + 64, + 38, + -32, + -20 + ], + [ + 65, + 78, + 64, + 38, + -32, + -20 + ], + [ + 130, + 78, + 64, + 38, + -32, + -20 + ], + [ + 195, + 78, + 64, + 38, + -32, + -20 + ], + [ + 260, + 78, + 64, + 38, + -32, + -20 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/target_thorns.png b/public/overlays/target_thorns.png new file mode 100644 index 0000000..42ef50a Binary files /dev/null and b/public/overlays/target_thorns.png differ diff --git a/public/overlays/thorns_hit.json b/public/overlays/thorns_hit.json new file mode 100644 index 0000000..7aee358 --- /dev/null +++ b/public/overlays/thorns_hit.json @@ -0,0 +1,108 @@ +{ + "name": "thorns_hit", + "celFile": "AuraThornsHit", + "width": 512, + "height": 129, + "directions": 1, + "frames": 10, + "framesPerDirection": 10, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -30, + "top": -63, + "width": 60, + "height": 64 + }, + "groups": [ + [ + [ + 0, + 0, + 60, + 64, + -30, + -63 + ], + [ + 61, + 0, + 60, + 64, + -30, + -63 + ], + [ + 122, + 0, + 60, + 64, + -30, + -63 + ], + [ + 183, + 0, + 60, + 64, + -30, + -63 + ], + [ + 244, + 0, + 60, + 64, + -30, + -63 + ], + [ + 305, + 0, + 60, + 64, + -30, + -63 + ], + [ + 366, + 0, + 60, + 64, + -30, + -63 + ], + [ + 427, + 0, + 60, + 64, + -30, + -63 + ], + [ + 0, + 65, + 60, + 64, + -30, + -63 + ], + [ + 61, + 65, + 60, + 64, + -30, + -63 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/thorns_hit.png b/public/overlays/thorns_hit.png new file mode 100644 index 0000000..8c7e86f Binary files /dev/null and b/public/overlays/thorns_hit.png differ diff --git a/public/overlays/thorns_indicate.json b/public/overlays/thorns_indicate.json new file mode 100644 index 0000000..ada46c6 --- /dev/null +++ b/public/overlays/thorns_indicate.json @@ -0,0 +1,180 @@ +{ + "name": "thorns_indicate", + "celFile": "AuraHfireIndicate", + "width": 512, + "height": 116, + "directions": 1, + "frames": 19, + "framesPerDirection": 19, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -32, + "top": -20, + "width": 64, + "height": 38 + }, + "groups": [ + [ + [ + 0, + 0, + 64, + 38, + -32, + -20 + ], + [ + 65, + 0, + 64, + 38, + -32, + -20 + ], + [ + 130, + 0, + 64, + 38, + -32, + -20 + ], + [ + 195, + 0, + 64, + 38, + -32, + -20 + ], + [ + 260, + 0, + 64, + 38, + -32, + -20 + ], + [ + 325, + 0, + 64, + 38, + -32, + -20 + ], + [ + 390, + 0, + 64, + 38, + -32, + -20 + ], + [ + 0, + 39, + 64, + 38, + -32, + -20 + ], + [ + 65, + 39, + 64, + 38, + -32, + -20 + ], + [ + 130, + 39, + 64, + 38, + -32, + -20 + ], + [ + 195, + 39, + 64, + 38, + -32, + -20 + ], + [ + 260, + 39, + 64, + 38, + -32, + -20 + ], + [ + 325, + 39, + 64, + 38, + -32, + -20 + ], + [ + 390, + 39, + 64, + 38, + -32, + -20 + ], + [ + 0, + 78, + 64, + 38, + -32, + -20 + ], + [ + 65, + 78, + 64, + 38, + -32, + -20 + ], + [ + 130, + 78, + 64, + 38, + -32, + -20 + ], + [ + 195, + 78, + 64, + 38, + -32, + -20 + ], + [ + 260, + 78, + 64, + 38, + -32, + -20 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/thorns_indicate.png b/public/overlays/thorns_indicate.png new file mode 100644 index 0000000..42ef50a Binary files /dev/null and b/public/overlays/thorns_indicate.png differ diff --git a/scripts/pack-missiles.ts b/scripts/pack-missiles.ts index acee499..7592779 100644 --- a/scripts/pack-missiles.ts +++ b/scripts/pack-missiles.ts @@ -95,8 +95,12 @@ const MISSILE_TARGETS = [ { name: 'revive', celFile: 'Revive', animSpeed: 16, trans: 1 }, // Paladin - { name: 'holybolt', celFile: 'HolyBoltMissile', animSpeed: 16 }, - { name: 'blessedhammer', celFile: 'blessedhammer', animSpeed: 16 }, + { name: 'holybolt', celFile: 'HolyBoltMissile', animSpeed: 16, trans: 1 }, + { name: 'blessedhammer', celFile: 'blessedhammer', animSpeed: 16, trans: 1 }, + { name: 'fistoftheheavensbolt', celFile: 'HolyBoltMissile', animSpeed: 16, trans: 1 }, + { name: 'foa', celFile: 'FOAorbiter', animSpeed: 16, trans: 1 }, + { name: 'blessedhammerex', celFile: 'blessedhammer', animSpeed: 16, trans: 1 }, + { name: 'blood1', celFile: 'BloodSmall01', animSpeed: 16, trans: 1 }, // Amazon { name: 'magicarrow', celFile: 'SafeArrow', animSpeed: 16 }, @@ -711,6 +715,12 @@ ${mapEntries} 'BoneCast': BONECAST_META, 'BoneSpearTrail': BONESPEARTRAIL_META, 'Revive': REVIVE_META, + + // Paladin CelFiles + 'FOAorbiter': FOA_META, + 'foaorbiter': FOA_META, + 'BloodSmall01': BLOOD1_META, + 'bloodsmall01': BLOOD1_META, }) ` diff --git a/scripts/pack-overlays.ts b/scripts/pack-overlays.ts index d7c247b..c176f1c 100644 --- a/scripts/pack-overlays.ts +++ b/scripts/pack-overlays.ts @@ -777,6 +777,186 @@ export const OVERLAY_TARGETS: readonly OverlayTarget[] = [ lightRadius: 0, lightColor: [255, 255, 255] as const, }, + + // --------------------------------------------------------------------------- + // 16 Authentic Diablo II v1.13c Paladin Combat, Cast, Hit & State Overlays + // --------------------------------------------------------------------------- + // 1. Charge (#107, Overlay ID 125) + { + name: 'charge', + celFile: 'Charge', + aliases: ['Charge'], + animRate: 16, + trans: 3, + preDraw: false, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + // 2. Conversion Aura (#116, Overlay ID 124) + { + name: 'conversion', + celFile: 'Conversion', + aliases: ['Conversion', 'conversionaura', 'conversion_aura'], + animRate: 8, + trans: 3, + preDraw: false, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + // 3. Conversion Cast (#116, Overlay ID 123) + { + name: 'conversioncast', + celFile: 'AuraResistColdBackCast', + aliases: ['conversion_cast'], + animRate: 16, + trans: 3, + preDraw: false, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + // 4. Holy Bolt Cast (#101, cast_undead, Overlay ID 21) + { + name: 'holy_bolt_cast', + celFile: 'HolyBoltCloud', + aliases: ['HolyBoltCloud', 'cast_undead', 'holyboltcloud', 'holybolt_cast'], + animRate: 16, + trans: 3, + preDraw: false, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + // 5. Fist of the Heavens Cast (#121, cast_fistofares, Overlay ID 32) + { + name: 'fist_of_the_heavens_cast', + celFile: 'FOACast', + aliases: ['FOACast', 'cast_fistofares', 'foacast', 'fistoftheheavenscast'], + animRate: 16, + trans: 3, + preDraw: false, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + // 6. Fist of the Heavens Hit (#121, handofgod, Overlay ID 158) + { + name: 'handofgod', + celFile: 'HolyShockHit', + aliases: ['fist_of_the_heavens_hit', 'fistoftheheavenshit'], + animRate: 16, + trans: 3, + preDraw: false, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + // 7. Sanctuary Knockback (#119, sanctuaryknockback, Overlay ID 113) + { + name: 'sanctuary_knockback', + celFile: 'SanctuaryKnockback', + aliases: ['SanctuaryKnockback', 'sanctuaryknockback'], + animRate: 8, + trans: 3, + preDraw: false, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + // 8. Holy Fire Hit (#102, hit_holyfire, Overlay ID 21) + { + name: 'holy_fire_hit', + celFile: 'AuraHolyFireHit', + aliases: ['AuraHolyFireHit', 'hit_holyfire', 'auraholyfirehit'], + animRate: 16, + trans: 3, + preDraw: false, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + // 9. Holy Fire Indicate (#102, target_holyfire, Overlay ID 22) + { + name: 'holy_fire_indicate', + celFile: 'AuraHfireIndicate', + aliases: ['AuraHfireIndicate', 'target_holyfire', 'aurahfireindicate'], + animRate: 16, + trans: 3, + preDraw: false, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + // 10. Thorns Hit (#103, hit_thorns, Overlay ID 25) + { + name: 'thorns_hit', + celFile: 'AuraThornsHit', + aliases: ['hit_thorns'], + animRate: 16, + trans: 3, + preDraw: false, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + // 11. Thorns Indicate (#103, target_thorns, Overlay ID 26) + { + name: 'thorns_indicate', + celFile: 'AuraHfireIndicate', + aliases: ['target_thorns'], + animRate: 16, + trans: 3, + preDraw: false, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + // 12. Cast Resist Fire (#100, cast_resistfire, Overlay ID 6) + { + name: 'cast_resistfire', + celFile: 'AuraResistFireFrontCast', + aliases: ['AuraResistFireFrontCast', 'cast_resist_fire', 'auraresistfirefrontcast'], + animRate: 16, + trans: 3, + preDraw: true, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + // 13. Cast Resist Cold (#105, cast_resistcold, Overlay ID 8) + { + name: 'cast_resistcold', + celFile: 'AuraResistColdBackCast', + aliases: ['cast_resist_cold'], + animRate: 16, + trans: 3, + preDraw: false, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + // 14. Cast Resist Lightning (#110, cast_resistlight, Overlay ID 10) + { + name: 'cast_resistlight', + celFile: 'AuraResistLightningBackCast', + aliases: ['AuraResistLightningBackCast', 'cast_resist_light', 'auraresistlightningbackcast'], + animRate: 16, + trans: 3, + preDraw: false, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + // 15. Cast Resist All (#125, cast_resistall, Overlay ID 12) + { + name: 'cast_resistall', + celFile: 'AuraResistAllCast', + aliases: ['AuraResistAllCast', 'cast_resist_all', 'auraresistallcast'], + animRate: 16, + trans: 3, + preDraw: true, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + // 16. Stun (#97 Smite, Overlay ID 148) + { + name: 'stun', + celFile: 'Stun', + aliases: ['Stun'], + animRate: 16, + trans: 3, + preDraw: false, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, ] as const export async function bakeOverlays(projectRoot: string = process.cwd()): Promise> { @@ -963,6 +1143,24 @@ export async function bakeOverlays(projectRoot: string = process.cwd()): Promise bonearmor_cast: 'BONE_ARMOR_CAST_OVERLAY_META', bonearmor_front: 'BONE_ARMOR_FRONT_OVERLAY_META', bonearmor_back: 'BONE_ARMOR_BACK_OVERLAY_META', + + // 16 Paladin Overlays + charge: 'CHARGE_OVERLAY_META', + conversion: 'CONVERSION_OVERLAY_META', + conversioncast: 'CONVERSION_CAST_OVERLAY_META', + holy_bolt_cast: 'HOLY_BOLT_CAST_OVERLAY_META', + fist_of_the_heavens_cast: 'FIST_OF_THE_HEAVENS_CAST_OVERLAY_META', + handofgod: 'HAND_OF_GOD_OVERLAY_META', + sanctuary_knockback: 'SANCTUARY_KNOCKBACK_OVERLAY_META', + holy_fire_hit: 'HOLY_FIRE_HIT_OVERLAY_META', + holy_fire_indicate: 'HOLY_FIRE_INDICATE_OVERLAY_META', + thorns_hit: 'THORNS_HIT_OVERLAY_META', + thorns_indicate: 'THORNS_INDICATE_OVERLAY_META', + cast_resistfire: 'CAST_RESIST_FIRE_OVERLAY_META', + cast_resistcold: 'CAST_RESIST_COLD_OVERLAY_META', + cast_resistlight: 'CAST_RESIST_LIGHTNING_OVERLAY_META', + cast_resistall: 'CAST_RESIST_ALL_OVERLAY_META', + stun: 'STUN_OVERLAY_META', } const individualConsts = OVERLAY_TARGETS.map(t => { @@ -1009,6 +1207,11 @@ export const BONE_ARMOR_OVERLAY_META: OverlayMeta = BONE_ARMOR_FRONT_OVERLAY_MET export const BONE_ARMOR_FRONT_META: OverlayMeta = BONE_ARMOR_FRONT_OVERLAY_META export const BONE_ARMOR_BACK_META: OverlayMeta = BONE_ARMOR_BACK_OVERLAY_META export const BONE_ARMOR_CAST_META: OverlayMeta = BONE_ARMOR_CAST_OVERLAY_META + +// Aliases for Paladin combat & state overlays +export const CONVERSION_AURA_OVERLAY_META: OverlayMeta = CONVERSION_OVERLAY_META +export const FIST_OF_THE_HEAVENS_HIT_OVERLAY_META: OverlayMeta = HAND_OF_GOD_OVERLAY_META +export const HANDOFGOD_OVERLAY_META: OverlayMeta = HAND_OF_GOD_OVERLAY_META ` const overlayMetasEntries: string[] = [] diff --git a/src/render/missiles-meta.ts b/src/render/missiles-meta.ts index 2668387..b13793d 100644 --- a/src/render/missiles-meta.ts +++ b/src/render/missiles-meta.ts @@ -5005,6 +5005,299 @@ export const BLESSEDHAMMER_META: MissileMeta = { ], } +export const FISTOFTHEHEAVENSBOLT_META: MissileMeta = { + name: "fistoftheheavensbolt", + celFile: "HolyBoltMissile", + width: 512, + height: 137, + directions: 1, + framesPerDirection: 16, + animSpeed: 16, + groups: [ + [ + [0, 0, 79, 45, -39, -59], + [80, 0, 79, 45, -39, -59], + [160, 0, 79, 45, -39, -59], + [240, 0, 79, 45, -39, -59], + [320, 0, 79, 45, -39, -59], + [400, 0, 79, 45, -39, -59], + [0, 46, 79, 45, -39, -59], + [80, 46, 79, 45, -39, -59], + [160, 46, 79, 45, -39, -59], + [240, 46, 79, 45, -39, -59], + [320, 46, 79, 45, -39, -59], + [400, 46, 79, 45, -39, -59], + [0, 92, 79, 45, -39, -59], + [80, 92, 79, 45, -39, -59], + [160, 92, 79, 45, -39, -59], + [240, 92, 79, 45, -39, -59] + ] + ], +} + +export const FOA_META: MissileMeta = { + name: "foa", + celFile: "FOAorbiter", + width: 512, + height: 34, + directions: 1, + framesPerDirection: 9, + animSpeed: 16, + groups: [ + [ + [0, 0, 34, 34, -18, -51], + [35, 0, 34, 34, -18, -51], + [70, 0, 34, 34, -18, -51], + [105, 0, 34, 34, -18, -51], + [140, 0, 34, 34, -18, -51], + [175, 0, 34, 34, -18, -51], + [210, 0, 34, 34, -18, -51], + [245, 0, 34, 34, -18, -51], + [280, 0, 34, 34, -18, -51] + ] + ], +} + +export const BLESSEDHAMMEREX_META: MissileMeta = { + name: "blessedhammerex", + celFile: "blessedhammer", + width: 512, + height: 192, + directions: 16, + framesPerDirection: 6, + animSpeed: 16, + groups: [ + [ + [0, 0, 27, 38, -13, -56], + [28, 0, 27, 38, -13, -56], + [56, 0, 27, 38, -13, -56], + [84, 0, 27, 38, -13, -56], + [112, 0, 27, 38, -13, -56], + [140, 0, 27, 38, -13, -56] + ], + [ + [168, 0, 26, 33, -13, -53], + [195, 0, 26, 33, -13, -53], + [222, 0, 26, 33, -13, -53], + [249, 0, 26, 33, -13, -53], + [276, 0, 26, 33, -13, -53], + [303, 0, 26, 33, -13, -53] + ], + [ + [330, 0, 27, 33, -14, -54], + [358, 0, 27, 33, -14, -54], + [386, 0, 27, 33, -14, -54], + [414, 0, 27, 33, -14, -54], + [442, 0, 27, 33, -14, -54], + [470, 0, 27, 33, -14, -54] + ], + [ + [0, 39, 27, 38, -13, -56], + [28, 39, 27, 38, -13, -56], + [56, 39, 27, 38, -13, -56], + [84, 39, 27, 38, -13, -56], + [112, 39, 27, 38, -13, -56], + [140, 39, 27, 38, -13, -56] + ], + [ + [168, 39, 7, 38, -3, -56], + [176, 39, 7, 38, -3, -56], + [184, 39, 7, 38, -3, -56], + [192, 39, 7, 38, -3, -56], + [200, 39, 7, 38, -3, -56], + [208, 39, 7, 38, -3, -56] + ], + [ + [216, 39, 36, 35, -18, -54], + [253, 39, 36, 35, -18, -54], + [290, 39, 36, 35, -18, -54], + [327, 39, 36, 35, -18, -54], + [364, 39, 36, 35, -18, -54], + [401, 39, 36, 35, -18, -54] + ], + [ + [438, 39, 7, 32, -4, -53], + [446, 39, 7, 32, -4, -53], + [454, 39, 7, 32, -4, -53], + [462, 39, 7, 32, -4, -53], + [470, 39, 7, 32, -4, -53], + [478, 39, 7, 32, -4, -53] + ], + [ + [0, 78, 36, 35, -18, -55], + [37, 78, 36, 35, -18, -55], + [74, 78, 36, 35, -18, -55], + [111, 78, 36, 35, -18, -55], + [148, 78, 36, 35, -18, -55], + [185, 78, 36, 35, -18, -55] + ], + [ + [222, 78, 16, 38, -8, -56], + [239, 78, 16, 38, -8, -56], + [256, 78, 16, 38, -8, -56], + [273, 78, 16, 38, -8, -56], + [290, 78, 16, 38, -8, -56], + [307, 78, 16, 38, -8, -56] + ], + [ + [324, 78, 34, 36, -17, -55], + [359, 78, 34, 36, -17, -55], + [394, 78, 34, 36, -17, -55], + [429, 78, 34, 36, -17, -55], + [464, 78, 34, 36, -17, -55], + [0, 117, 34, 36, -17, -55] + ], + [ + [35, 117, 34, 34, -17, -54], + [70, 117, 34, 34, -17, -54], + [105, 117, 34, 34, -17, -54], + [140, 117, 34, 34, -17, -54], + [175, 117, 34, 34, -17, -54], + [210, 117, 34, 34, -17, -54] + ], + [ + [245, 117, 16, 32, -8, -53], + [262, 117, 16, 32, -8, -53], + [279, 117, 16, 32, -8, -53], + [296, 117, 16, 32, -8, -53], + [313, 117, 16, 32, -8, -53], + [330, 117, 16, 32, -8, -53] + ], + [ + [347, 117, 16, 32, -9, -53], + [364, 117, 16, 32, -9, -53], + [381, 117, 16, 32, -9, -53], + [398, 117, 16, 32, -9, -53], + [415, 117, 16, 32, -9, -53], + [432, 117, 16, 32, -9, -53] + ], + [ + [449, 117, 33, 34, -17, -54], + [0, 154, 33, 34, -17, -54], + [34, 154, 33, 34, -17, -54], + [68, 154, 33, 34, -17, -54], + [102, 154, 33, 34, -17, -54], + [136, 154, 33, 34, -17, -54] + ], + [ + [170, 154, 34, 36, -17, -55], + [205, 154, 34, 36, -17, -55], + [240, 154, 34, 36, -17, -55], + [275, 154, 34, 36, -17, -55], + [310, 154, 34, 36, -17, -55], + [345, 154, 34, 36, -17, -55] + ], + [ + [380, 154, 16, 38, -7, -56], + [397, 154, 16, 38, -7, -56], + [414, 154, 16, 38, -7, -56], + [431, 154, 16, 38, -7, -56], + [448, 154, 16, 38, -7, -56], + [465, 154, 16, 38, -7, -56] + ] + ], +} + +export const BLOOD1_META: MissileMeta = { + name: "blood1", + celFile: "BloodSmall01", + width: 512, + height: 348, + directions: 8, + framesPerDirection: 9, + animSpeed: 16, + groups: [ + [ + [0, 0, 32, 54, -18, -44], + [33, 0, 32, 54, -18, -44], + [66, 0, 32, 54, -18, -44], + [99, 0, 32, 54, -18, -44], + [132, 0, 32, 54, -18, -44], + [165, 0, 32, 54, -18, -44], + [198, 0, 32, 54, -18, -44], + [231, 0, 32, 54, -18, -44], + [264, 0, 32, 54, -18, -44] + ], + [ + [297, 0, 38, 57, -20, -50], + [336, 0, 38, 57, -20, -50], + [375, 0, 38, 57, -20, -50], + [414, 0, 38, 57, -20, -50], + [453, 0, 38, 57, -20, -50], + [0, 58, 38, 57, -20, -50], + [39, 58, 38, 57, -20, -50], + [78, 58, 38, 57, -20, -50], + [117, 58, 38, 57, -20, -50] + ], + [ + [156, 58, 32, 59, -14, -50], + [189, 58, 32, 59, -14, -50], + [222, 58, 32, 59, -14, -50], + [255, 58, 32, 59, -14, -50], + [288, 58, 32, 59, -14, -50], + [321, 58, 32, 59, -14, -50], + [354, 58, 32, 59, -14, -50], + [387, 58, 32, 59, -14, -50], + [420, 58, 32, 59, -14, -50] + ], + [ + [453, 58, 38, 53, -18, -44], + [0, 118, 38, 53, -18, -44], + [39, 118, 38, 53, -18, -44], + [78, 118, 38, 53, -18, -44], + [117, 118, 38, 53, -18, -44], + [156, 118, 38, 53, -18, -44], + [195, 118, 38, 53, -18, -44], + [234, 118, 38, 53, -18, -44], + [273, 118, 38, 53, -18, -44] + ], + [ + [312, 118, 30, 54, -16, -43], + [343, 118, 30, 54, -16, -43], + [374, 118, 30, 54, -16, -43], + [405, 118, 30, 54, -16, -43], + [436, 118, 30, 54, -16, -43], + [467, 118, 30, 54, -16, -43], + [0, 173, 30, 54, -16, -43], + [31, 173, 30, 54, -16, -43], + [62, 173, 30, 54, -16, -43] + ], + [ + [93, 173, 37, 54, -21, -47], + [131, 173, 37, 54, -21, -47], + [169, 173, 37, 54, -21, -47], + [207, 173, 37, 54, -21, -47], + [245, 173, 37, 54, -21, -47], + [283, 173, 37, 54, -21, -47], + [321, 173, 37, 54, -21, -47], + [359, 173, 37, 54, -21, -47], + [397, 173, 37, 54, -21, -47] + ], + [ + [435, 173, 30, 59, -14, -51], + [466, 173, 30, 59, -14, -51], + [0, 233, 30, 59, -14, -51], + [31, 233, 30, 59, -14, -51], + [62, 233, 30, 59, -14, -51], + [93, 233, 30, 59, -14, -51], + [124, 233, 30, 59, -14, -51], + [155, 233, 30, 59, -14, -51], + [186, 233, 30, 59, -14, -51] + ], + [ + [217, 233, 37, 55, -16, -47], + [255, 233, 37, 55, -16, -47], + [293, 233, 37, 55, -16, -47], + [331, 233, 37, 55, -16, -47], + [369, 233, 37, 55, -16, -47], + [407, 233, 37, 55, -16, -47], + [445, 233, 37, 55, -16, -47], + [0, 293, 37, 55, -16, -47], + [38, 293, 37, 55, -16, -47] + ] + ], +} + export const MAGICARROW_META: MissileMeta = { name: "magicarrow", celFile: "SafeArrow", @@ -7759,6 +8052,10 @@ export const MISSILE_METAS: Readonly> = Object.freez 'revive': REVIVE_META, 'holybolt': HOLYBOLT_META, 'blessedhammer': BLESSEDHAMMER_META, + 'fistoftheheavensbolt': FISTOFTHEHEAVENSBOLT_META, + 'foa': FOA_META, + 'blessedhammerex': BLESSEDHAMMEREX_META, + 'blood1': BLOOD1_META, 'magicarrow': MAGICARROW_META, 'firearrow': FIREARROW_META, 'icearrow': ICEARROW_META, @@ -7883,4 +8180,10 @@ export const MISSILE_METAS: Readonly> = Object.freez 'BoneCast': BONECAST_META, 'BoneSpearTrail': BONESPEARTRAIL_META, 'Revive': REVIVE_META, + + // Paladin CelFiles + 'FOAorbiter': FOA_META, + 'foaorbiter': FOA_META, + 'BloodSmall01': BLOOD1_META, + 'bloodsmall01': BLOOD1_META, }) diff --git a/src/render/overlays-meta.ts b/src/render/overlays-meta.ts index ac7f2ec..c451ec8 100644 --- a/src/render/overlays-meta.ts +++ b/src/render/overlays-meta.ts @@ -11611,6 +11611,2310 @@ export const BONE_ARMOR_BACK_OVERLAY_META: OverlayMeta = { ] } +export const CHARGE_OVERLAY_META: OverlayMeta = { + "name": "charge", + "celFile": "Charge", + "width": 512, + "height": 93, + "directions": 1, + "frames": 8, + "framesPerDirection": 8, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -32, + "top": -27, + "width": 65, + "height": 46 + }, + "groups": [ + [ + [ + 0, + 0, + 65, + 46, + -32, + -27 + ], + [ + 66, + 0, + 65, + 46, + -32, + -27 + ], + [ + 132, + 0, + 65, + 46, + -32, + -27 + ], + [ + 198, + 0, + 65, + 46, + -32, + -27 + ], + [ + 264, + 0, + 65, + 46, + -32, + -27 + ], + [ + 330, + 0, + 65, + 46, + -32, + -27 + ], + [ + 396, + 0, + 65, + 46, + -32, + -27 + ], + [ + 0, + 47, + 65, + 46, + -32, + -27 + ] + ] + ] +} + +export const CONVERSION_OVERLAY_META: OverlayMeta = { + "name": "conversion", + "celFile": "Conversion", + "width": 512, + "height": 52, + "directions": 1, + "frames": 10, + "framesPerDirection": 10, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -23, + "top": -81, + "width": 46, + "height": 52 + }, + "groups": [ + [ + [ + 0, + 0, + 46, + 52, + -23, + -81 + ], + [ + 47, + 0, + 46, + 52, + -23, + -81 + ], + [ + 94, + 0, + 46, + 52, + -23, + -81 + ], + [ + 141, + 0, + 46, + 52, + -23, + -81 + ], + [ + 188, + 0, + 46, + 52, + -23, + -81 + ], + [ + 235, + 0, + 46, + 52, + -23, + -81 + ], + [ + 282, + 0, + 46, + 52, + -23, + -81 + ], + [ + 329, + 0, + 46, + 52, + -23, + -81 + ], + [ + 376, + 0, + 46, + 52, + -23, + -81 + ], + [ + 423, + 0, + 46, + 52, + -23, + -81 + ] + ] + ] +} + +export const CONVERSION_CAST_OVERLAY_META: OverlayMeta = { + "name": "conversioncast", + "celFile": "AuraResistColdBackCast", + "width": 512, + "height": 137, + "directions": 1, + "frames": 11, + "framesPerDirection": 11, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -62, + "top": -24, + "width": 123, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 123, + 45, + -62, + -24 + ], + [ + 124, + 0, + 123, + 45, + -62, + -24 + ], + [ + 248, + 0, + 123, + 45, + -62, + -24 + ], + [ + 372, + 0, + 123, + 45, + -62, + -24 + ], + [ + 0, + 46, + 123, + 45, + -62, + -24 + ], + [ + 124, + 46, + 123, + 45, + -62, + -24 + ], + [ + 248, + 46, + 123, + 45, + -62, + -24 + ], + [ + 372, + 46, + 123, + 45, + -62, + -24 + ], + [ + 0, + 92, + 123, + 45, + -62, + -24 + ], + [ + 124, + 92, + 123, + 45, + -62, + -24 + ], + [ + 248, + 92, + 123, + 45, + -62, + -24 + ] + ] + ] +} + +export const HOLY_BOLT_CAST_OVERLAY_META: OverlayMeta = { + "name": "holy_bolt_cast", + "celFile": "HolyBoltCloud", + "width": 1024, + "height": 519, + "directions": 1, + "frames": 16, + "framesPerDirection": 16, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -93, + "top": -110, + "width": 183, + "height": 129 + }, + "groups": [ + [ + [ + 0, + 0, + 183, + 129, + -93, + -110 + ], + [ + 184, + 0, + 183, + 129, + -93, + -110 + ], + [ + 368, + 0, + 183, + 129, + -93, + -110 + ], + [ + 552, + 0, + 183, + 129, + -93, + -110 + ], + [ + 736, + 0, + 183, + 129, + -93, + -110 + ], + [ + 0, + 130, + 183, + 129, + -93, + -110 + ], + [ + 184, + 130, + 183, + 129, + -93, + -110 + ], + [ + 368, + 130, + 183, + 129, + -93, + -110 + ], + [ + 552, + 130, + 183, + 129, + -93, + -110 + ], + [ + 736, + 130, + 183, + 129, + -93, + -110 + ], + [ + 0, + 260, + 183, + 129, + -93, + -110 + ], + [ + 184, + 260, + 183, + 129, + -93, + -110 + ], + [ + 368, + 260, + 183, + 129, + -93, + -110 + ], + [ + 552, + 260, + 183, + 129, + -93, + -110 + ], + [ + 736, + 260, + 183, + 129, + -93, + -110 + ], + [ + 0, + 390, + 183, + 129, + -93, + -110 + ] + ] + ] +} + +export const FIST_OF_THE_HEAVENS_CAST_OVERLAY_META: OverlayMeta = { + "name": "fist_of_the_heavens_cast", + "celFile": "FOACast", + "width": 1024, + "height": 326, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -56, + "top": -120, + "width": 108, + "height": 108 + }, + "groups": [ + [ + [ + 0, + 0, + 108, + 108, + -56, + -120 + ], + [ + 109, + 0, + 108, + 108, + -56, + -120 + ], + [ + 218, + 0, + 108, + 108, + -56, + -120 + ], + [ + 327, + 0, + 108, + 108, + -56, + -120 + ], + [ + 436, + 0, + 108, + 108, + -56, + -120 + ], + [ + 545, + 0, + 108, + 108, + -56, + -120 + ], + [ + 654, + 0, + 108, + 108, + -56, + -120 + ], + [ + 763, + 0, + 108, + 108, + -56, + -120 + ], + [ + 872, + 0, + 108, + 108, + -56, + -120 + ], + [ + 0, + 109, + 108, + 108, + -56, + -120 + ], + [ + 109, + 109, + 108, + 108, + -56, + -120 + ], + [ + 218, + 109, + 108, + 108, + -56, + -120 + ], + [ + 327, + 109, + 108, + 108, + -56, + -120 + ], + [ + 436, + 109, + 108, + 108, + -56, + -120 + ], + [ + 545, + 109, + 108, + 108, + -56, + -120 + ], + [ + 654, + 109, + 108, + 108, + -56, + -120 + ], + [ + 763, + 109, + 108, + 108, + -56, + -120 + ], + [ + 872, + 109, + 108, + 108, + -56, + -120 + ], + [ + 0, + 218, + 108, + 108, + -56, + -120 + ], + [ + 109, + 218, + 108, + 108, + -56, + -120 + ] + ] + ] +} + +export const HAND_OF_GOD_OVERLAY_META: OverlayMeta = { + "name": "handofgod", + "celFile": "HolyShockHit", + "width": 1024, + "height": 513, + "directions": 1, + "frames": 21, + "framesPerDirection": 21, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -29, + "top": -240, + "width": 62, + "height": 256 + }, + "groups": [ + [ + [ + 0, + 0, + 62, + 256, + -29, + -240 + ], + [ + 63, + 0, + 62, + 256, + -29, + -240 + ], + [ + 126, + 0, + 62, + 256, + -29, + -240 + ], + [ + 189, + 0, + 62, + 256, + -29, + -240 + ], + [ + 252, + 0, + 62, + 256, + -29, + -240 + ], + [ + 315, + 0, + 62, + 256, + -29, + -240 + ], + [ + 378, + 0, + 62, + 256, + -29, + -240 + ], + [ + 441, + 0, + 62, + 256, + -29, + -240 + ], + [ + 504, + 0, + 62, + 256, + -29, + -240 + ], + [ + 567, + 0, + 62, + 256, + -29, + -240 + ], + [ + 630, + 0, + 62, + 256, + -29, + -240 + ], + [ + 693, + 0, + 62, + 256, + -29, + -240 + ], + [ + 756, + 0, + 62, + 256, + -29, + -240 + ], + [ + 819, + 0, + 62, + 256, + -29, + -240 + ], + [ + 882, + 0, + 62, + 256, + -29, + -240 + ], + [ + 945, + 0, + 62, + 256, + -29, + -240 + ], + [ + 0, + 257, + 62, + 256, + -29, + -240 + ], + [ + 63, + 257, + 62, + 256, + -29, + -240 + ], + [ + 126, + 257, + 62, + 256, + -29, + -240 + ], + [ + 189, + 257, + 62, + 256, + -29, + -240 + ], + [ + 252, + 257, + 62, + 256, + -29, + -240 + ] + ] + ] +} + +export const SANCTUARY_KNOCKBACK_OVERLAY_META: OverlayMeta = { + "name": "sanctuary_knockback", + "celFile": "SanctuaryKnockback", + "width": 512, + "height": 362, + "directions": 1, + "frames": 13, + "framesPerDirection": 13, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -37, + "top": -96, + "width": 73, + "height": 120 + }, + "groups": [ + [ + [ + 0, + 0, + 73, + 120, + -37, + -96 + ], + [ + 74, + 0, + 73, + 120, + -37, + -96 + ], + [ + 148, + 0, + 73, + 120, + -37, + -96 + ], + [ + 222, + 0, + 73, + 120, + -37, + -96 + ], + [ + 296, + 0, + 73, + 120, + -37, + -96 + ], + [ + 370, + 0, + 73, + 120, + -37, + -96 + ], + [ + 0, + 121, + 73, + 120, + -37, + -96 + ], + [ + 74, + 121, + 73, + 120, + -37, + -96 + ], + [ + 148, + 121, + 73, + 120, + -37, + -96 + ], + [ + 222, + 121, + 73, + 120, + -37, + -96 + ], + [ + 296, + 121, + 73, + 120, + -37, + -96 + ], + [ + 370, + 121, + 73, + 120, + -37, + -96 + ], + [ + 0, + 242, + 73, + 120, + -37, + -96 + ] + ] + ] +} + +export const HOLY_FIRE_HIT_OVERLAY_META: OverlayMeta = { + "name": "holy_fire_hit", + "celFile": "AuraHolyFireHit", + "width": 512, + "height": 179, + "directions": 1, + "frames": 18, + "framesPerDirection": 18, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -42, + "top": -58, + "width": 84, + "height": 59 + }, + "groups": [ + [ + [ + 0, + 0, + 84, + 59, + -42, + -58 + ], + [ + 85, + 0, + 84, + 59, + -42, + -58 + ], + [ + 170, + 0, + 84, + 59, + -42, + -58 + ], + [ + 255, + 0, + 84, + 59, + -42, + -58 + ], + [ + 340, + 0, + 84, + 59, + -42, + -58 + ], + [ + 425, + 0, + 84, + 59, + -42, + -58 + ], + [ + 0, + 60, + 84, + 59, + -42, + -58 + ], + [ + 85, + 60, + 84, + 59, + -42, + -58 + ], + [ + 170, + 60, + 84, + 59, + -42, + -58 + ], + [ + 255, + 60, + 84, + 59, + -42, + -58 + ], + [ + 340, + 60, + 84, + 59, + -42, + -58 + ], + [ + 425, + 60, + 84, + 59, + -42, + -58 + ], + [ + 0, + 120, + 84, + 59, + -42, + -58 + ], + [ + 85, + 120, + 84, + 59, + -42, + -58 + ], + [ + 170, + 120, + 84, + 59, + -42, + -58 + ], + [ + 255, + 120, + 84, + 59, + -42, + -58 + ], + [ + 340, + 120, + 84, + 59, + -42, + -58 + ], + [ + 425, + 120, + 84, + 59, + -42, + -58 + ] + ] + ] +} + +export const HOLY_FIRE_INDICATE_OVERLAY_META: OverlayMeta = { + "name": "holy_fire_indicate", + "celFile": "AuraHfireIndicate", + "width": 512, + "height": 116, + "directions": 1, + "frames": 19, + "framesPerDirection": 19, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -32, + "top": -20, + "width": 64, + "height": 38 + }, + "groups": [ + [ + [ + 0, + 0, + 64, + 38, + -32, + -20 + ], + [ + 65, + 0, + 64, + 38, + -32, + -20 + ], + [ + 130, + 0, + 64, + 38, + -32, + -20 + ], + [ + 195, + 0, + 64, + 38, + -32, + -20 + ], + [ + 260, + 0, + 64, + 38, + -32, + -20 + ], + [ + 325, + 0, + 64, + 38, + -32, + -20 + ], + [ + 390, + 0, + 64, + 38, + -32, + -20 + ], + [ + 0, + 39, + 64, + 38, + -32, + -20 + ], + [ + 65, + 39, + 64, + 38, + -32, + -20 + ], + [ + 130, + 39, + 64, + 38, + -32, + -20 + ], + [ + 195, + 39, + 64, + 38, + -32, + -20 + ], + [ + 260, + 39, + 64, + 38, + -32, + -20 + ], + [ + 325, + 39, + 64, + 38, + -32, + -20 + ], + [ + 390, + 39, + 64, + 38, + -32, + -20 + ], + [ + 0, + 78, + 64, + 38, + -32, + -20 + ], + [ + 65, + 78, + 64, + 38, + -32, + -20 + ], + [ + 130, + 78, + 64, + 38, + -32, + -20 + ], + [ + 195, + 78, + 64, + 38, + -32, + -20 + ], + [ + 260, + 78, + 64, + 38, + -32, + -20 + ] + ] + ] +} + +export const THORNS_HIT_OVERLAY_META: OverlayMeta = { + "name": "thorns_hit", + "celFile": "AuraThornsHit", + "width": 512, + "height": 129, + "directions": 1, + "frames": 10, + "framesPerDirection": 10, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -30, + "top": -63, + "width": 60, + "height": 64 + }, + "groups": [ + [ + [ + 0, + 0, + 60, + 64, + -30, + -63 + ], + [ + 61, + 0, + 60, + 64, + -30, + -63 + ], + [ + 122, + 0, + 60, + 64, + -30, + -63 + ], + [ + 183, + 0, + 60, + 64, + -30, + -63 + ], + [ + 244, + 0, + 60, + 64, + -30, + -63 + ], + [ + 305, + 0, + 60, + 64, + -30, + -63 + ], + [ + 366, + 0, + 60, + 64, + -30, + -63 + ], + [ + 427, + 0, + 60, + 64, + -30, + -63 + ], + [ + 0, + 65, + 60, + 64, + -30, + -63 + ], + [ + 61, + 65, + 60, + 64, + -30, + -63 + ] + ] + ] +} + +export const THORNS_INDICATE_OVERLAY_META: OverlayMeta = { + "name": "thorns_indicate", + "celFile": "AuraHfireIndicate", + "width": 512, + "height": 116, + "directions": 1, + "frames": 19, + "framesPerDirection": 19, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -32, + "top": -20, + "width": 64, + "height": 38 + }, + "groups": [ + [ + [ + 0, + 0, + 64, + 38, + -32, + -20 + ], + [ + 65, + 0, + 64, + 38, + -32, + -20 + ], + [ + 130, + 0, + 64, + 38, + -32, + -20 + ], + [ + 195, + 0, + 64, + 38, + -32, + -20 + ], + [ + 260, + 0, + 64, + 38, + -32, + -20 + ], + [ + 325, + 0, + 64, + 38, + -32, + -20 + ], + [ + 390, + 0, + 64, + 38, + -32, + -20 + ], + [ + 0, + 39, + 64, + 38, + -32, + -20 + ], + [ + 65, + 39, + 64, + 38, + -32, + -20 + ], + [ + 130, + 39, + 64, + 38, + -32, + -20 + ], + [ + 195, + 39, + 64, + 38, + -32, + -20 + ], + [ + 260, + 39, + 64, + 38, + -32, + -20 + ], + [ + 325, + 39, + 64, + 38, + -32, + -20 + ], + [ + 390, + 39, + 64, + 38, + -32, + -20 + ], + [ + 0, + 78, + 64, + 38, + -32, + -20 + ], + [ + 65, + 78, + 64, + 38, + -32, + -20 + ], + [ + 130, + 78, + 64, + 38, + -32, + -20 + ], + [ + 195, + 78, + 64, + 38, + -32, + -20 + ], + [ + 260, + 78, + 64, + 38, + -32, + -20 + ] + ] + ] +} + +export const CAST_RESIST_FIRE_OVERLAY_META: OverlayMeta = { + "name": "cast_resistfire", + "celFile": "AuraResistFireFrontCast", + "width": 512, + "height": 137, + "directions": 1, + "frames": 11, + "framesPerDirection": 11, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -59, + "top": -24, + "width": 119, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 119, + 45, + -59, + -24 + ], + [ + 120, + 0, + 119, + 45, + -59, + -24 + ], + [ + 240, + 0, + 119, + 45, + -59, + -24 + ], + [ + 360, + 0, + 119, + 45, + -59, + -24 + ], + [ + 0, + 46, + 119, + 45, + -59, + -24 + ], + [ + 120, + 46, + 119, + 45, + -59, + -24 + ], + [ + 240, + 46, + 119, + 45, + -59, + -24 + ], + [ + 360, + 46, + 119, + 45, + -59, + -24 + ], + [ + 0, + 92, + 119, + 45, + -59, + -24 + ], + [ + 120, + 92, + 119, + 45, + -59, + -24 + ], + [ + 240, + 92, + 119, + 45, + -59, + -24 + ] + ] + ] +} + +export const CAST_RESIST_COLD_OVERLAY_META: OverlayMeta = { + "name": "cast_resistcold", + "celFile": "AuraResistColdBackCast", + "width": 512, + "height": 137, + "directions": 1, + "frames": 11, + "framesPerDirection": 11, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -62, + "top": -24, + "width": 123, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 123, + 45, + -62, + -24 + ], + [ + 124, + 0, + 123, + 45, + -62, + -24 + ], + [ + 248, + 0, + 123, + 45, + -62, + -24 + ], + [ + 372, + 0, + 123, + 45, + -62, + -24 + ], + [ + 0, + 46, + 123, + 45, + -62, + -24 + ], + [ + 124, + 46, + 123, + 45, + -62, + -24 + ], + [ + 248, + 46, + 123, + 45, + -62, + -24 + ], + [ + 372, + 46, + 123, + 45, + -62, + -24 + ], + [ + 0, + 92, + 123, + 45, + -62, + -24 + ], + [ + 124, + 92, + 123, + 45, + -62, + -24 + ], + [ + 248, + 92, + 123, + 45, + -62, + -24 + ] + ] + ] +} + +export const CAST_RESIST_LIGHTNING_OVERLAY_META: OverlayMeta = { + "name": "cast_resistlight", + "celFile": "AuraResistLightningBackCast", + "width": 512, + "height": 137, + "directions": 1, + "frames": 11, + "framesPerDirection": 11, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -59, + "top": -24, + "width": 119, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 119, + 45, + -59, + -24 + ], + [ + 120, + 0, + 119, + 45, + -59, + -24 + ], + [ + 240, + 0, + 119, + 45, + -59, + -24 + ], + [ + 360, + 0, + 119, + 45, + -59, + -24 + ], + [ + 0, + 46, + 119, + 45, + -59, + -24 + ], + [ + 120, + 46, + 119, + 45, + -59, + -24 + ], + [ + 240, + 46, + 119, + 45, + -59, + -24 + ], + [ + 360, + 46, + 119, + 45, + -59, + -24 + ], + [ + 0, + 92, + 119, + 45, + -59, + -24 + ], + [ + 120, + 92, + 119, + 45, + -59, + -24 + ], + [ + 240, + 92, + 119, + 45, + -59, + -24 + ] + ] + ] +} + +export const CAST_RESIST_ALL_OVERLAY_META: OverlayMeta = { + "name": "cast_resistall", + "celFile": "AuraResistAllCast", + "width": 512, + "height": 179, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -47, + "top": -24, + "width": 90, + "height": 44 + }, + "groups": [ + [ + [ + 0, + 0, + 90, + 44, + -47, + -24 + ], + [ + 91, + 0, + 90, + 44, + -47, + -24 + ], + [ + 182, + 0, + 90, + 44, + -47, + -24 + ], + [ + 273, + 0, + 90, + 44, + -47, + -24 + ], + [ + 364, + 0, + 90, + 44, + -47, + -24 + ], + [ + 0, + 45, + 90, + 44, + -47, + -24 + ], + [ + 91, + 45, + 90, + 44, + -47, + -24 + ], + [ + 182, + 45, + 90, + 44, + -47, + -24 + ], + [ + 273, + 45, + 90, + 44, + -47, + -24 + ], + [ + 364, + 45, + 90, + 44, + -47, + -24 + ], + [ + 0, + 90, + 90, + 44, + -47, + -24 + ], + [ + 91, + 90, + 90, + 44, + -47, + -24 + ], + [ + 182, + 90, + 90, + 44, + -47, + -24 + ], + [ + 273, + 90, + 90, + 44, + -47, + -24 + ], + [ + 364, + 90, + 90, + 44, + -47, + -24 + ], + [ + 0, + 135, + 90, + 44, + -47, + -24 + ], + [ + 91, + 135, + 90, + 44, + -47, + -24 + ], + [ + 182, + 135, + 90, + 44, + -47, + -24 + ], + [ + 273, + 135, + 90, + 44, + -47, + -24 + ], + [ + 364, + 135, + 90, + 44, + -47, + -24 + ] + ] + ] +} + +export const STUN_OVERLAY_META: OverlayMeta = { + "name": "stun", + "celFile": "Stun", + "width": 512, + "height": 99, + "directions": 1, + "frames": 12, + "framesPerDirection": 12, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -34, + "top": -87, + "width": 69, + "height": 49 + }, + "groups": [ + [ + [ + 0, + 0, + 69, + 49, + -34, + -87 + ], + [ + 70, + 0, + 69, + 49, + -34, + -87 + ], + [ + 140, + 0, + 69, + 49, + -34, + -87 + ], + [ + 210, + 0, + 69, + 49, + -34, + -87 + ], + [ + 280, + 0, + 69, + 49, + -34, + -87 + ], + [ + 350, + 0, + 69, + 49, + -34, + -87 + ], + [ + 420, + 0, + 69, + 49, + -34, + -87 + ], + [ + 0, + 50, + 69, + 49, + -34, + -87 + ], + [ + 70, + 50, + 69, + 49, + -34, + -87 + ], + [ + 140, + 50, + 69, + 49, + -34, + -87 + ], + [ + 210, + 50, + 69, + 49, + -34, + -87 + ], + [ + 280, + 50, + 69, + 49, + -34, + -87 + ] + ] + ] +} + // Backward compatibility aliases for primary aura constants export const MIGHT_AURA_META: OverlayMeta = MIGHT_FRONT_AURA_META @@ -11651,6 +13955,11 @@ export const BONE_ARMOR_FRONT_META: OverlayMeta = BONE_ARMOR_FRONT_OVERLAY_META export const BONE_ARMOR_BACK_META: OverlayMeta = BONE_ARMOR_BACK_OVERLAY_META export const BONE_ARMOR_CAST_META: OverlayMeta = BONE_ARMOR_CAST_OVERLAY_META +// Aliases for Paladin combat & state overlays +export const CONVERSION_AURA_OVERLAY_META: OverlayMeta = CONVERSION_OVERLAY_META +export const FIST_OF_THE_HEAVENS_HIT_OVERLAY_META: OverlayMeta = HAND_OF_GOD_OVERLAY_META +export const HANDOFGOD_OVERLAY_META: OverlayMeta = HAND_OF_GOD_OVERLAY_META + export const ALL_OVERLAY_NAMES: readonly string[] = [ "fire_cast_1", @@ -11718,6 +14027,22 @@ export const ALL_OVERLAY_NAMES: readonly string[] = [ "bonearmor_cast", "bonearmor_front", "bonearmor_back", + "charge", + "conversion", + "conversioncast", + "holy_bolt_cast", + "fist_of_the_heavens_cast", + "handofgod", + "sanctuary_knockback", + "holy_fire_hit", + "holy_fire_indicate", + "thorns_hit", + "thorns_indicate", + "cast_resistfire", + "cast_resistcold", + "cast_resistlight", + "cast_resistall", + "stun", ] export const OVERLAY_METAS: Readonly> = { @@ -12025,4 +14350,59 @@ export const OVERLAY_METAS: Readonly> = { "boneshieldback": BONE_ARMOR_BACK_OVERLAY_META, "bonearmorback": BONE_ARMOR_BACK_OVERLAY_META, "bone_armor_back": BONE_ARMOR_BACK_OVERLAY_META, + "charge": CHARGE_OVERLAY_META, + "Charge": CHARGE_OVERLAY_META, + "conversion": CONVERSION_OVERLAY_META, + "Conversion": CONVERSION_OVERLAY_META, + "conversionaura": CONVERSION_OVERLAY_META, + "conversion_aura": CONVERSION_OVERLAY_META, + "conversioncast": CONVERSION_CAST_OVERLAY_META, + "AuraResistColdBackCast": CONVERSION_CAST_OVERLAY_META, + "auraresistcoldbackcast": CONVERSION_CAST_OVERLAY_META, + "conversion_cast": CONVERSION_CAST_OVERLAY_META, + "holy_bolt_cast": HOLY_BOLT_CAST_OVERLAY_META, + "HolyBoltCloud": HOLY_BOLT_CAST_OVERLAY_META, + "holyboltcloud": HOLY_BOLT_CAST_OVERLAY_META, + "cast_undead": HOLY_BOLT_CAST_OVERLAY_META, + "holybolt_cast": HOLY_BOLT_CAST_OVERLAY_META, + "fist_of_the_heavens_cast": FIST_OF_THE_HEAVENS_CAST_OVERLAY_META, + "FOACast": FIST_OF_THE_HEAVENS_CAST_OVERLAY_META, + "foacast": FIST_OF_THE_HEAVENS_CAST_OVERLAY_META, + "cast_fistofares": FIST_OF_THE_HEAVENS_CAST_OVERLAY_META, + "fistoftheheavenscast": FIST_OF_THE_HEAVENS_CAST_OVERLAY_META, + "handofgod": HAND_OF_GOD_OVERLAY_META, + "HolyShockHit": HAND_OF_GOD_OVERLAY_META, + "fist_of_the_heavens_hit": HAND_OF_GOD_OVERLAY_META, + "fistoftheheavenshit": HAND_OF_GOD_OVERLAY_META, + "sanctuary_knockback": SANCTUARY_KNOCKBACK_OVERLAY_META, + "SanctuaryKnockback": SANCTUARY_KNOCKBACK_OVERLAY_META, + "sanctuaryknockback": SANCTUARY_KNOCKBACK_OVERLAY_META, + "holy_fire_hit": HOLY_FIRE_HIT_OVERLAY_META, + "AuraHolyFireHit": HOLY_FIRE_HIT_OVERLAY_META, + "auraholyfirehit": HOLY_FIRE_HIT_OVERLAY_META, + "hit_holyfire": HOLY_FIRE_HIT_OVERLAY_META, + "holy_fire_indicate": HOLY_FIRE_INDICATE_OVERLAY_META, + "AuraHfireIndicate": HOLY_FIRE_INDICATE_OVERLAY_META, + "aurahfireindicate": HOLY_FIRE_INDICATE_OVERLAY_META, + "target_holyfire": HOLY_FIRE_INDICATE_OVERLAY_META, + "thorns_hit": THORNS_HIT_OVERLAY_META, + "hit_thorns": THORNS_HIT_OVERLAY_META, + "thorns_indicate": THORNS_INDICATE_OVERLAY_META, + "target_thorns": THORNS_INDICATE_OVERLAY_META, + "cast_resistfire": CAST_RESIST_FIRE_OVERLAY_META, + "AuraResistFireFrontCast": CAST_RESIST_FIRE_OVERLAY_META, + "auraresistfirefrontcast": CAST_RESIST_FIRE_OVERLAY_META, + "cast_resist_fire": CAST_RESIST_FIRE_OVERLAY_META, + "cast_resistcold": CAST_RESIST_COLD_OVERLAY_META, + "cast_resist_cold": CAST_RESIST_COLD_OVERLAY_META, + "cast_resistlight": CAST_RESIST_LIGHTNING_OVERLAY_META, + "AuraResistLightningBackCast": CAST_RESIST_LIGHTNING_OVERLAY_META, + "auraresistlightningbackcast": CAST_RESIST_LIGHTNING_OVERLAY_META, + "cast_resist_light": CAST_RESIST_LIGHTNING_OVERLAY_META, + "cast_resistall": CAST_RESIST_ALL_OVERLAY_META, + "AuraResistAllCast": CAST_RESIST_ALL_OVERLAY_META, + "auraresistallcast": CAST_RESIST_ALL_OVERLAY_META, + "cast_resist_all": CAST_RESIST_ALL_OVERLAY_META, + "stun": STUN_OVERLAY_META, + "Stun": STUN_OVERLAY_META, } diff --git a/tests/skills/pal/adv-pal-assets-audit.test.ts b/tests/skills/pal/adv-pal-assets-audit.test.ts new file mode 100644 index 0000000..60ebbf2 --- /dev/null +++ b/tests/skills/pal/adv-pal-assets-audit.test.ts @@ -0,0 +1,441 @@ +import { describe, expect, it } from 'vitest' +import fs from 'node:fs' +import path from 'node:path' +import zlib from 'node:zlib' +import { + MISSILE_METAS, + HOLYBOLT_META, + BLESSEDHAMMER_META, + FISTOFTHEHEAVENSBOLT_META, + FOA_META, + BLESSEDHAMMEREX_META, + BLOOD1_META, + type MissileMeta, +} from '../../../src/render/missiles-meta.ts' +import { + OVERLAY_METAS, + ALL_OVERLAY_NAMES, + // 10 Offensive Auras + MIGHT_FRONT_AURA_META, + MIGHT_BACK_AURA_META, + HOLY_FIRE_FRONT_AURA_META, + HOLY_FIRE_BACK_AURA_META, + THORNS_FRONT_AURA_META, + THORNS_BACK_AURA_META, + BLESSED_AIM_FRONT_AURA_META, + BLESSED_AIM_BACK_AURA_META, + CONCENTRATION_FRONT_AURA_META, + CONCENTRATION_BACK_AURA_META, + HOLY_FREEZE_AURA_META, + HOLY_SHOCK_FRONT_AURA_META, + HOLY_SHOCK_BACK_AURA_META, + SANCTUARY_FRONT_AURA_META, + SANCTUARY_BACK_AURA_META, + FANATICISM_FRONT_AURA_META, + FANATICISM_BACK_AURA_META, + CONVICTION_AURA_META, + // 10 Defensive Auras + PRAYER_FRONT_AURA_META, + PRAYER_BACK_AURA_META, + RESIST_FIRE_AURA_META, + DEFIANCE_FRONT_AURA_META, + DEFIANCE_BACK_AURA_META, + RESIST_COLD_AURA_META, + CLEANSING_FRONT_AURA_META, + CLEANSING_BACK_AURA_META, + RESIST_LIGHTNING_AURA_META, + VIGOR_FRONT_AURA_META, + VIGOR_BACK_AURA_META, + MEDITATION_AURA_META, + REDEMPTION_AURA_META, + SALVATION_FRONT_AURA_META, + SALVATION_BACK_AURA_META, + // 16 Combat, Cast, Hit & State Overlays + CHARGE_OVERLAY_META, + CONVERSION_OVERLAY_META, + CONVERSION_CAST_OVERLAY_META, + HOLY_BOLT_CAST_OVERLAY_META, + FIST_OF_THE_HEAVENS_CAST_OVERLAY_META, + HAND_OF_GOD_OVERLAY_META, + SANCTUARY_KNOCKBACK_OVERLAY_META, + HOLY_FIRE_HIT_OVERLAY_META, + HOLY_FIRE_INDICATE_OVERLAY_META, + THORNS_HIT_OVERLAY_META, + THORNS_INDICATE_OVERLAY_META, + CAST_RESIST_FIRE_OVERLAY_META, + CAST_RESIST_COLD_OVERLAY_META, + CAST_RESIST_LIGHTNING_OVERLAY_META, + CAST_RESIST_ALL_OVERLAY_META, + STUN_OVERLAY_META, + type OverlayMeta, +} from '../../../src/render/overlays-meta.ts' + +// Strict PNG RGBA Decoder +function decodeRgbaPng(buf: Buffer) { + const width = buf.readUInt32BE(16) + const height = buf.readUInt32BE(20) + const bitDepth = buf[24]! + const colorType = buf[25]! + + const idatParts: Buffer[] = [] + let offset = 8 + while (offset < buf.length) { + const len = buf.readUInt32BE(offset) + const type = buf.subarray(offset + 4, offset + 8).toString('ascii') + if (type === 'IDAT') { + idatParts.push(buf.subarray(offset + 8, offset + 8 + len)) + } + offset += 12 + len + } + const idat = Buffer.concat(idatParts) + const raw = zlib.inflateSync(idat) + + const bpp = 4 + const rowBytes = width * bpp + const pixels = new Uint8Array(width * height * 4) + let srcAt = 0 + let dstAt = 0 + + for (let y = 0; y < height; y++) { + const filter = raw[srcAt++] + const row = raw.subarray(srcAt, srcAt + rowBytes) + srcAt += rowBytes + + const prevRow = y > 0 ? pixels.subarray((y - 1) * rowBytes, y * rowBytes) : null + const curRow = pixels.subarray(dstAt, dstAt + rowBytes) + + for (let x = 0; x < rowBytes; x++) { + const left = x >= bpp ? curRow[x - bpp]! : 0 + const up = prevRow ? prevRow[x]! : 0 + const upLeft = prevRow && x >= bpp ? prevRow[x - bpp]! : 0 + + let val = row[x]! + if (filter === 0) { + // None + } else if (filter === 1) { + val = (val + left) & 0xff + } else if (filter === 2) { + val = (val + up) & 0xff + } else if (filter === 3) { + val = (val + Math.floor((left + up) / 2)) & 0xff + } else if (filter === 4) { + const p = left + up - upLeft + const pa = Math.abs(p - left) + const pb = Math.abs(p - up) + const pc = Math.abs(p - upLeft) + let pr = upLeft + if (pa <= pb && pa <= pc) pr = left + else if (pb <= pc) pr = up + val = (val + pr) & 0xff + } + curRow[x] = val + } + dstAt += rowBytes + } + + return { width, height, bitDepth, colorType, pixels } +} + +describe('Adv Coverage Audit — Paladin Assets & Metadata Integrity', () => { + const publicMissilesDir = path.resolve(__dirname, '../../../public/missiles') + const packMissilesDir = path.resolve(__dirname, '../../../samples/d2-packs/missiles') + const publicOverlaysDir = path.resolve(__dirname, '../../../public/overlays') + const packOverlaysDir = path.resolve(__dirname, '../../../samples/d2-packs/overlays') + + const PALADIN_MISSILE_REQS = [ + { name: 'holybolt', celFile: 'HolyBoltMissile', meta: HOLYBOLT_META }, + { name: 'blessedhammer', celFile: 'blessedhammer', meta: BLESSEDHAMMER_META }, + { name: 'fistoftheheavensbolt', celFile: 'HolyBoltMissile', meta: FISTOFTHEHEAVENSBOLT_META }, + { name: 'foa', celFile: 'FOAorbiter', meta: FOA_META }, + { name: 'blessedhammerex', celFile: 'blessedhammer', meta: BLESSEDHAMMEREX_META }, + { name: 'blood1', celFile: 'BloodSmall01', meta: BLOOD1_META }, + ] as const + + const PALADIN_AURA_REQS = [ + // 10 Offensive Auras + { name: 'might_front', celFile: 'AuraMightFront', meta: MIGHT_FRONT_AURA_META, preDraw: false }, + { name: 'might_back', celFile: 'AuraMightBack', meta: MIGHT_BACK_AURA_META, preDraw: true }, + { name: 'holy_fire_front', celFile: 'AuraHolyFireFront', meta: HOLY_FIRE_FRONT_AURA_META, preDraw: false }, + { name: 'holy_fire_back', celFile: 'AuraHolyFireBack', meta: HOLY_FIRE_BACK_AURA_META, preDraw: true }, + { name: 'thorns_front', celFile: 'AuraThornsFront', meta: THORNS_FRONT_AURA_META, preDraw: false }, + { name: 'thorns_back', celFile: 'AuraThornsBack', meta: THORNS_BACK_AURA_META, preDraw: true }, + { name: 'blessed_aim_front', celFile: 'BlessedAim_front', meta: BLESSED_AIM_FRONT_AURA_META, preDraw: false }, + { name: 'blessed_aim_back', celFile: 'BlessedAim_back', meta: BLESSED_AIM_BACK_AURA_META, preDraw: true }, + { name: 'concentration_front', celFile: 'Concentration_front', meta: CONCENTRATION_FRONT_AURA_META, preDraw: false }, + { name: 'concentration_back', celFile: 'Concentration_back', meta: CONCENTRATION_BACK_AURA_META, preDraw: true }, + { name: 'holy_freeze', celFile: 'HolyFreeze', meta: HOLY_FREEZE_AURA_META, preDraw: true }, + { name: 'holy_shock_front', celFile: 'HolyShock_front', meta: HOLY_SHOCK_FRONT_AURA_META, preDraw: false }, + { name: 'holy_shock_back', celFile: 'HolyShock_back', meta: HOLY_SHOCK_BACK_AURA_META, preDraw: true }, + { name: 'sanctuary_front', celFile: 'SanctuaryAura_Front', meta: SANCTUARY_FRONT_AURA_META, preDraw: true }, + { name: 'sanctuary_back', celFile: 'SanctuaryAura_Back', meta: SANCTUARY_BACK_AURA_META, preDraw: true }, + { name: 'fanaticism_front', celFile: 'Fanatacism_Front', meta: FANATICISM_FRONT_AURA_META, preDraw: false }, + { name: 'fanaticism_back', celFile: 'Fanatacism_Back', meta: FANATICISM_BACK_AURA_META, preDraw: true }, + { name: 'conviction', celFile: 'Conviction', meta: CONVICTION_AURA_META, preDraw: true }, + // 10 Defensive Auras + { name: 'prayer_front', celFile: 'AuraPrayerFront', meta: PRAYER_FRONT_AURA_META, preDraw: false }, + { name: 'prayer_back', celFile: 'AuraPrayerBack', meta: PRAYER_BACK_AURA_META, preDraw: true }, + { name: 'resist_fire', celFile: 'AuraResistFireFront', meta: RESIST_FIRE_AURA_META, preDraw: true }, + { name: 'defiance_front', celFile: 'AuraDefianceFront', meta: DEFIANCE_FRONT_AURA_META, preDraw: false }, + { name: 'defiance_back', celFile: 'AuraDefianceBack', meta: DEFIANCE_BACK_AURA_META, preDraw: true }, + { name: 'resist_cold', celFile: 'AuraResistColdBack', meta: RESIST_COLD_AURA_META, preDraw: true }, + { name: 'cleansing_front', celFile: 'Cleansing_front', meta: CLEANSING_FRONT_AURA_META, preDraw: false }, + { name: 'cleansing_back', celFile: 'Cleansing_back', meta: CLEANSING_BACK_AURA_META, preDraw: true }, + { name: 'resist_lightning', celFile: 'AuraResistLightningBack', meta: RESIST_LIGHTNING_AURA_META, preDraw: true }, + { name: 'vigor_front', celFile: 'Stamina_front', meta: VIGOR_FRONT_AURA_META, preDraw: false }, + { name: 'vigor_back', celFile: 'Stamina_back', meta: VIGOR_BACK_AURA_META, preDraw: true }, + { name: 'meditation', celFile: 'Meditation', meta: MEDITATION_AURA_META, preDraw: false }, + { name: 'redemption', celFile: 'Redemption', meta: REDEMPTION_AURA_META, preDraw: true }, + { name: 'salvation_front', celFile: 'AuraResistAllFront', meta: SALVATION_FRONT_AURA_META, preDraw: false }, + { name: 'salvation_back', celFile: 'AuraResistAllBack', meta: SALVATION_BACK_AURA_META, preDraw: true }, + ] as const + + const PALADIN_COMBAT_OVERLAY_REQS = [ + { name: 'charge', celFile: 'Charge', meta: CHARGE_OVERLAY_META, preDraw: false }, + { name: 'conversion', celFile: 'Conversion', meta: CONVERSION_OVERLAY_META, preDraw: false }, + { name: 'conversioncast', celFile: 'AuraResistColdBackCast', meta: CONVERSION_CAST_OVERLAY_META, preDraw: false }, + { name: 'holy_bolt_cast', celFile: 'HolyBoltCloud', meta: HOLY_BOLT_CAST_OVERLAY_META, preDraw: false }, + { name: 'fist_of_the_heavens_cast', celFile: 'FOACast', meta: FIST_OF_THE_HEAVENS_CAST_OVERLAY_META, preDraw: false }, + { name: 'handofgod', celFile: 'HolyShockHit', meta: HAND_OF_GOD_OVERLAY_META, preDraw: false }, + { name: 'sanctuary_knockback', celFile: 'SanctuaryKnockback', meta: SANCTUARY_KNOCKBACK_OVERLAY_META, preDraw: false }, + { name: 'holy_fire_hit', celFile: 'AuraHolyFireHit', meta: HOLY_FIRE_HIT_OVERLAY_META, preDraw: false }, + { name: 'holy_fire_indicate', celFile: 'AuraHfireIndicate', meta: HOLY_FIRE_INDICATE_OVERLAY_META, preDraw: false }, + { name: 'thorns_hit', celFile: 'AuraThornsHit', meta: THORNS_HIT_OVERLAY_META, preDraw: false }, + { name: 'thorns_indicate', celFile: 'AuraHfireIndicate', meta: THORNS_INDICATE_OVERLAY_META, preDraw: false }, + { name: 'cast_resistfire', celFile: 'AuraResistFireFrontCast', meta: CAST_RESIST_FIRE_OVERLAY_META, preDraw: true }, + { name: 'cast_resistcold', celFile: 'AuraResistColdBackCast', meta: CAST_RESIST_COLD_OVERLAY_META, preDraw: false }, + { name: 'cast_resistlight', celFile: 'AuraResistLightningBackCast', meta: CAST_RESIST_LIGHTNING_OVERLAY_META, preDraw: false }, + { name: 'cast_resistall', celFile: 'AuraResistAllCast', meta: CAST_RESIST_ALL_OVERLAY_META, preDraw: true }, + { name: 'stun', celFile: 'Stun', meta: STUN_OVERLAY_META, preDraw: false }, + ] as const + + const ALL_OVERLAYS = [...PALADIN_AURA_REQS, ...PALADIN_COMBAT_OVERLAY_REQS] + + describe('Dimension 1: Feature Matrix & Skill Requirements Coverage', () => { + it('1.1 Verifies all 30 Paladin skills required missiles are registered in MISSILE_METAS', () => { + for (const m of PALADIN_MISSILE_REQS) { + expect(MISSILE_METAS[m.name], `Missile ${m.name} must be in MISSILE_METAS`).toBeDefined() + expect(MISSILE_METAS[m.name]).toBe(m.meta) + expect(m.meta.name).toBe(m.name) + expect(m.meta.celFile).toBe(m.celFile) + } + }) + + it('1.2 Verifies all 30 Paladin auras and 16 combat/state overlays are in OVERLAY_METAS', () => { + for (const o of ALL_OVERLAYS) { + expect(OVERLAY_METAS[o.name], `Overlay ${o.name} must be in OVERLAY_METAS`).toBeDefined() + expect(OVERLAY_METAS[o.name]).toBe(o.meta) + expect(o.meta.name).toBe(o.name) + expect(o.meta.celFile).toBe(o.celFile) + expect(o.meta.preDraw).toBe(o.preDraw) + } + }) + + it('1.3 Verifies ALL_OVERLAY_NAMES contains all Paladin overlays', () => { + for (const o of ALL_OVERLAYS) { + expect(ALL_OVERLAY_NAMES).toContain(o.name) + } + }) + + it('1.4 Verifies ground rings and back auras have preDraw:true while front auras have preDraw:false', () => { + expect(HOLY_FREEZE_AURA_META.preDraw).toBe(true) + expect(CONVICTION_AURA_META.preDraw).toBe(true) + expect(REDEMPTION_AURA_META.preDraw).toBe(true) + expect(RESIST_FIRE_AURA_META.preDraw).toBe(true) + expect(RESIST_COLD_AURA_META.preDraw).toBe(true) + expect(RESIST_LIGHTNING_AURA_META.preDraw).toBe(true) + expect(MIGHT_BACK_AURA_META.preDraw).toBe(true) + expect(MIGHT_FRONT_AURA_META.preDraw).toBe(false) + expect(FANATICISM_BACK_AURA_META.preDraw).toBe(true) + expect(FANATICISM_FRONT_AURA_META.preDraw).toBe(false) + }) + }) + + describe('Dimension 2: Zero Null / Missing / NaN Frame Geometry', () => { + it('2.1 Checks for zero null, undefined, or NaN values in missile frame geometry', () => { + for (const m of PALADIN_MISSILE_REQS) { + const meta = m.meta + expect(meta.width).toBeGreaterThan(0) + expect(meta.height).toBeGreaterThan(0) + expect(meta.directions).toBeGreaterThan(0) + expect(meta.framesPerDirection).toBeGreaterThan(0) + expect(meta.animSpeed).toBeGreaterThan(0) + expect(meta.groups).toBeDefined() + expect(meta.groups.length).toBe(meta.directions) + + for (let d = 0; d < meta.groups.length; d++) { + const group = meta.groups[d]! + expect(group.length).toBe(meta.framesPerDirection) + for (let f = 0; f < group.length; f++) { + const frame = group[f]! + expect(frame.length).toBe(6) + for (let i = 0; i < 6; i++) { + const val = frame[i] + expect(val, `Null/undefined/NaN in ${m.name} dir ${d} frame ${f} idx ${i}`).not.toBeNull() + expect(val).not.toBeUndefined() + expect(typeof val).toBe('number') + expect(Number.isNaN(val)).toBe(false) + expect(Number.isFinite(val)).toBe(true) + } + const [x, y, w, h, ax, ay] = frame + expect(x).toBeGreaterThanOrEqual(0) + expect(y).toBeGreaterThanOrEqual(0) + expect(w).toBeGreaterThan(0) + expect(h).toBeGreaterThan(0) + expect(x + w).toBeLessThanOrEqual(meta.width) + expect(y + h).toBeLessThanOrEqual(meta.height) + expect(ax).toBeGreaterThanOrEqual(-1000) + expect(ax).toBeLessThanOrEqual(1000) + expect(ay).toBeGreaterThanOrEqual(-1000) + expect(ay).toBeLessThanOrEqual(1000) + } + } + } + }) + + it('2.2 Checks for zero null, undefined, or NaN values in overlay frame geometry', () => { + for (const o of ALL_OVERLAYS) { + const meta = o.meta + expect(meta.width).toBeGreaterThan(0) + expect(meta.height).toBeGreaterThan(0) + expect(meta.directions).toBe(1) + expect(meta.frames).toBeGreaterThan(0) + expect(meta.framesPerDirection).toBe(meta.frames) + expect(meta.animRate).toBeGreaterThan(0) + expect(meta.trans).toBe(3) + expect(meta.groups).toBeDefined() + expect(meta.groups.length).toBe(1) + + const group = meta.groups[0]! + expect(group.length).toBe(meta.frames) + for (let f = 0; f < group.length; f++) { + const frame = group[f]! + expect(frame.length).toBe(6) + for (let i = 0; i < 6; i++) { + const val = frame[i] + expect(val, `Null/undefined/NaN in ${o.name} frame ${f} idx ${i}`).not.toBeNull() + expect(val).not.toBeUndefined() + expect(typeof val).toBe('number') + expect(Number.isNaN(val)).toBe(false) + expect(Number.isFinite(val)).toBe(true) + } + const [x, y, w, h, ax, ay] = frame + expect(x).toBeGreaterThanOrEqual(0) + expect(y).toBeGreaterThanOrEqual(0) + expect(w).toBeGreaterThan(0) + expect(h).toBeGreaterThan(0) + expect(x + w).toBeLessThanOrEqual(meta.width) + expect(y + h).toBeLessThanOrEqual(meta.height) + expect(ax).toBeGreaterThanOrEqual(-1000) + expect(ax).toBeLessThanOrEqual(1000) + expect(ay).toBeGreaterThanOrEqual(-1000) + expect(ay).toBeLessThanOrEqual(1000) + } + } + }) + }) + + describe('Dimension 3: Physical Asset Disk Mirroring & File Health', () => { + it('3.1 Every Paladin missile exists in public/missiles and samples/d2-packs/missiles with valid PNG header', () => { + for (const m of PALADIN_MISSILE_REQS) { + for (const dir of [publicMissilesDir, packMissilesDir]) { + const pngPath = path.join(dir, `${m.name}.png`) + const jsonPath = path.join(dir, `${m.name}.json`) + + expect(fs.existsSync(pngPath), `Missing ${pngPath}`).toBe(true) + expect(fs.existsSync(jsonPath), `Missing ${jsonPath}`).toBe(true) + + const stat = fs.statSync(pngPath) + expect(stat.size).toBeGreaterThan(500) + + const buf = fs.readFileSync(pngPath) + expect(buf.readUInt32BE(0)).toBe(0x89504e47) // \x89PNG + } + } + }) + + it('3.2 Every Paladin overlay exists in public/overlays and samples/d2-packs/overlays with valid PNG header', () => { + for (const o of ALL_OVERLAYS) { + for (const dir of [publicOverlaysDir, packOverlaysDir]) { + const pngPath = path.join(dir, `${o.name}.png`) + const jsonPath = path.join(dir, `${o.name}.json`) + + expect(fs.existsSync(pngPath), `Missing ${pngPath}`).toBe(true) + expect(fs.existsSync(jsonPath), `Missing ${jsonPath}`).toBe(true) + + const stat = fs.statSync(pngPath) + expect(stat.size).toBeGreaterThan(500) + + const buf = fs.readFileSync(pngPath) + expect(buf.readUInt32BE(0)).toBe(0x89504e47) // \x89PNG + } + } + }) + }) + + describe('Dimension 4: 100% Pixel Buffer Dark Boundary Audit (Zero Black Fringe)', () => { + it('4.1 Asserts max(r,g,b) <= 4 implies alpha === 0 across all Paladin missiles', () => { + for (const m of PALADIN_MISSILE_REQS) { + const pngPath = path.join(publicMissilesDir, `${m.name}.png`) + const buf = fs.readFileSync(pngPath) + const { width, height, pixels } = decodeRgbaPng(buf) + + expect(width).toBe(m.meta.width) + expect(height).toBe(m.meta.height) + + let blackOpaqueCount = 0 + for (let i = 0; i < pixels.length; i += 4) { + const r = pixels[i]! + const g = pixels[i + 1]! + const b = pixels[i + 2]! + const a = pixels[i + 3]! + const mVal = Math.max(r, g, b) + + if (mVal <= 4 && a > 0) { + blackOpaqueCount++ + } + } + expect(blackOpaqueCount, `Dark halo pixels in ${m.name}.png`).toBe(0) + } + }) + + it('4.2 Asserts max(r,g,b) <= 4 implies alpha === 0 across all Paladin overlays', () => { + for (const o of ALL_OVERLAYS) { + const pngPath = path.join(publicOverlaysDir, `${o.name}.png`) + const buf = fs.readFileSync(pngPath) + const { width, height, pixels } = decodeRgbaPng(buf) + + expect(width).toBe(o.meta.width) + expect(height).toBe(o.meta.height) + + let blackOpaqueCount = 0 + for (let i = 0; i < pixels.length; i += 4) { + const r = pixels[i]! + const g = pixels[i + 1]! + const b = pixels[i + 2]! + const a = pixels[i + 3]! + const mVal = Math.max(r, g, b) + + if (mVal <= 4 && a > 0) { + blackOpaqueCount++ + } + } + expect(blackOpaqueCount, `Dark halo pixels in ${o.name}.png`).toBe(0) + } + }) + }) + + describe('Dimension 5: Zero Runtime MPQ Invariant', () => { + it('5.1 Verifies metadata files contain zero runtime MPQ, DLL or fs imports', () => { + const missilesMetaPath = path.resolve(__dirname, '../../../src/render/missiles-meta.ts') + const overlaysMetaPath = path.resolve(__dirname, '../../../src/render/overlays-meta.ts') + + for (const p of [missilesMetaPath, overlaysMetaPath]) { + const content = fs.readFileSync(p, 'utf-8') + expect(content).not.toContain('node:fs') + expect(content).not.toContain('src/mpq') + expect(content).not.toContain('.mpq') + expect(content).not.toContain('.dll') + } + }) + }) +}) diff --git a/tests/skills/pal/pal-assets.test.ts b/tests/skills/pal/pal-assets.test.ts new file mode 100644 index 0000000..8ea356d --- /dev/null +++ b/tests/skills/pal/pal-assets.test.ts @@ -0,0 +1,489 @@ +import { describe, expect, it } from 'vitest' +import fs from 'node:fs' +import path from 'node:path' +import zlib from 'node:zlib' +import { + MISSILE_METAS, + HOLYBOLT_META, + BLESSEDHAMMER_META, + FISTOFTHEHEAVENSBOLT_META, + FOA_META, + BLESSEDHAMMEREX_META, + BLOOD1_META, + type MissileMeta, +} from '../../../src/render/missiles-meta.ts' +import { + OVERLAY_METAS, + ALL_OVERLAY_NAMES, + // 10 Offensive Auras + MIGHT_FRONT_AURA_META, + MIGHT_BACK_AURA_META, + HOLY_FIRE_FRONT_AURA_META, + HOLY_FIRE_BACK_AURA_META, + THORNS_FRONT_AURA_META, + THORNS_BACK_AURA_META, + BLESSED_AIM_FRONT_AURA_META, + BLESSED_AIM_BACK_AURA_META, + CONCENTRATION_FRONT_AURA_META, + CONCENTRATION_BACK_AURA_META, + HOLY_FREEZE_AURA_META, + HOLY_SHOCK_FRONT_AURA_META, + HOLY_SHOCK_BACK_AURA_META, + SANCTUARY_FRONT_AURA_META, + SANCTUARY_BACK_AURA_META, + FANATICISM_FRONT_AURA_META, + FANATICISM_BACK_AURA_META, + CONVICTION_AURA_META, + // 10 Defensive Auras + PRAYER_FRONT_AURA_META, + PRAYER_BACK_AURA_META, + RESIST_FIRE_AURA_META, + DEFIANCE_FRONT_AURA_META, + DEFIANCE_BACK_AURA_META, + RESIST_COLD_AURA_META, + CLEANSING_FRONT_AURA_META, + CLEANSING_BACK_AURA_META, + RESIST_LIGHTNING_AURA_META, + VIGOR_FRONT_AURA_META, + VIGOR_BACK_AURA_META, + MEDITATION_AURA_META, + REDEMPTION_AURA_META, + SALVATION_FRONT_AURA_META, + SALVATION_BACK_AURA_META, + // 16 Combat, Cast, Hit & State Overlays + CHARGE_OVERLAY_META, + CONVERSION_OVERLAY_META, + CONVERSION_CAST_OVERLAY_META, + HOLY_BOLT_CAST_OVERLAY_META, + FIST_OF_THE_HEAVENS_CAST_OVERLAY_META, + HAND_OF_GOD_OVERLAY_META, + SANCTUARY_KNOCKBACK_OVERLAY_META, + HOLY_FIRE_HIT_OVERLAY_META, + HOLY_FIRE_INDICATE_OVERLAY_META, + THORNS_HIT_OVERLAY_META, + THORNS_INDICATE_OVERLAY_META, + CAST_RESIST_FIRE_OVERLAY_META, + CAST_RESIST_COLD_OVERLAY_META, + CAST_RESIST_LIGHTNING_OVERLAY_META, + CAST_RESIST_ALL_OVERLAY_META, + STUN_OVERLAY_META, + type OverlayMeta, +} from '../../../src/render/overlays-meta.ts' + +// Strict PNG RGBA Decoder +function decodeRgbaPng(buf: Buffer) { + const width = buf.readUInt32BE(16) + const height = buf.readUInt32BE(20) + const bitDepth = buf[24]! + const colorType = buf[25]! + + const idatParts: Buffer[] = [] + let offset = 8 + while (offset < buf.length) { + const len = buf.readUInt32BE(offset) + const type = buf.subarray(offset + 4, offset + 8).toString('ascii') + if (type === 'IDAT') { + idatParts.push(buf.subarray(offset + 8, offset + 8 + len)) + } + offset += 12 + len + } + const idat = Buffer.concat(idatParts) + const raw = zlib.inflateSync(idat) + + const bpp = 4 + const rowBytes = width * bpp + const pixels = new Uint8Array(width * height * 4) + let srcAt = 0 + let dstAt = 0 + + for (let y = 0; y < height; y++) { + const filter = raw[srcAt++] + const row = raw.subarray(srcAt, srcAt + rowBytes) + srcAt += rowBytes + + const prevRow = y > 0 ? pixels.subarray((y - 1) * rowBytes, y * rowBytes) : null + const curRow = pixels.subarray(dstAt, dstAt + rowBytes) + + for (let x = 0; x < rowBytes; x++) { + const left = x >= bpp ? curRow[x - bpp]! : 0 + const up = prevRow ? prevRow[x]! : 0 + const upLeft = prevRow && x >= bpp ? prevRow[x - bpp]! : 0 + + let val = row[x]! + if (filter === 0) { + // None + } else if (filter === 1) { + val = (val + left) & 0xff + } else if (filter === 2) { + val = (val + up) & 0xff + } else if (filter === 3) { + val = (val + Math.floor((left + up) / 2)) & 0xff + } else if (filter === 4) { + const p = left + up - upLeft + const pa = Math.abs(p - left) + const pb = Math.abs(p - up) + const pc = Math.abs(p - upLeft) + let pr = upLeft + if (pa <= pb && pa <= pc) pr = left + else if (pb <= pc) pr = up + val = (val + pr) & 0xff + } + curRow[x] = val + } + dstAt += rowBytes + } + + return { width, height, bitDepth, colorType, pixels } +} + +describe('Milestone M6 — Paladin Asset Packaging & Registration', () => { + const publicMissilesDir = path.resolve(__dirname, '../../../public/missiles') + const packMissilesDir = path.resolve(__dirname, '../../../samples/d2-packs/missiles') + const publicOverlaysDir = path.resolve(__dirname, '../../../public/overlays') + const packOverlaysDir = path.resolve(__dirname, '../../../samples/d2-packs/overlays') + + const PALADIN_MISSILES = [ + { name: 'holybolt', celFile: 'HolyBoltMissile', meta: HOLYBOLT_META }, + { name: 'blessedhammer', celFile: 'blessedhammer', meta: BLESSEDHAMMER_META }, + { name: 'fistoftheheavensbolt', celFile: 'HolyBoltMissile', meta: FISTOFTHEHEAVENSBOLT_META }, + { name: 'foa', celFile: 'FOAorbiter', meta: FOA_META }, + { name: 'blessedhammerex', celFile: 'blessedhammer', meta: BLESSEDHAMMEREX_META }, + { name: 'blood1', celFile: 'BloodSmall01', meta: BLOOD1_META }, + ] as const + + const PALADIN_AURAS = [ + // 10 Offensive Auras + { name: 'might_front', celFile: 'AuraMightFront', meta: MIGHT_FRONT_AURA_META, preDraw: false }, + { name: 'might_back', celFile: 'AuraMightBack', meta: MIGHT_BACK_AURA_META, preDraw: true }, + { name: 'holy_fire_front', celFile: 'AuraHolyFireFront', meta: HOLY_FIRE_FRONT_AURA_META, preDraw: false }, + { name: 'holy_fire_back', celFile: 'AuraHolyFireBack', meta: HOLY_FIRE_BACK_AURA_META, preDraw: true }, + { name: 'thorns_front', celFile: 'AuraThornsFront', meta: THORNS_FRONT_AURA_META, preDraw: false }, + { name: 'thorns_back', celFile: 'AuraThornsBack', meta: THORNS_BACK_AURA_META, preDraw: true }, + { name: 'blessed_aim_front', celFile: 'BlessedAim_front', meta: BLESSED_AIM_FRONT_AURA_META, preDraw: false }, + { name: 'blessed_aim_back', celFile: 'BlessedAim_back', meta: BLESSED_AIM_BACK_AURA_META, preDraw: true }, + { name: 'concentration_front', celFile: 'Concentration_front', meta: CONCENTRATION_FRONT_AURA_META, preDraw: false }, + { name: 'concentration_back', celFile: 'Concentration_back', meta: CONCENTRATION_BACK_AURA_META, preDraw: true }, + { name: 'holy_freeze', celFile: 'HolyFreeze', meta: HOLY_FREEZE_AURA_META, preDraw: true }, + { name: 'holy_shock_front', celFile: 'HolyShock_front', meta: HOLY_SHOCK_FRONT_AURA_META, preDraw: false }, + { name: 'holy_shock_back', celFile: 'HolyShock_back', meta: HOLY_SHOCK_BACK_AURA_META, preDraw: true }, + { name: 'sanctuary_front', celFile: 'SanctuaryAura_Front', meta: SANCTUARY_FRONT_AURA_META, preDraw: true }, + { name: 'sanctuary_back', celFile: 'SanctuaryAura_Back', meta: SANCTUARY_BACK_AURA_META, preDraw: true }, + { name: 'fanaticism_front', celFile: 'Fanatacism_Front', meta: FANATICISM_FRONT_AURA_META, preDraw: false }, + { name: 'fanaticism_back', celFile: 'Fanatacism_Back', meta: FANATICISM_BACK_AURA_META, preDraw: true }, + { name: 'conviction', celFile: 'Conviction', meta: CONVICTION_AURA_META, preDraw: true }, + // 10 Defensive Auras + { name: 'prayer_front', celFile: 'AuraPrayerFront', meta: PRAYER_FRONT_AURA_META, preDraw: false }, + { name: 'prayer_back', celFile: 'AuraPrayerBack', meta: PRAYER_BACK_AURA_META, preDraw: true }, + { name: 'resist_fire', celFile: 'AuraResistFireFront', meta: RESIST_FIRE_AURA_META, preDraw: true }, + { name: 'defiance_front', celFile: 'AuraDefianceFront', meta: DEFIANCE_FRONT_AURA_META, preDraw: false }, + { name: 'defiance_back', celFile: 'AuraDefianceBack', meta: DEFIANCE_BACK_AURA_META, preDraw: true }, + { name: 'resist_cold', celFile: 'AuraResistColdBack', meta: RESIST_COLD_AURA_META, preDraw: true }, + { name: 'cleansing_front', celFile: 'Cleansing_front', meta: CLEANSING_FRONT_AURA_META, preDraw: false }, + { name: 'cleansing_back', celFile: 'Cleansing_back', meta: CLEANSING_BACK_AURA_META, preDraw: true }, + { name: 'resist_lightning', celFile: 'AuraResistLightningBack', meta: RESIST_LIGHTNING_AURA_META, preDraw: true }, + { name: 'vigor_front', celFile: 'Stamina_front', meta: VIGOR_FRONT_AURA_META, preDraw: false }, + { name: 'vigor_back', celFile: 'Stamina_back', meta: VIGOR_BACK_AURA_META, preDraw: true }, + { name: 'meditation', celFile: 'Meditation', meta: MEDITATION_AURA_META, preDraw: false }, + { name: 'redemption', celFile: 'Redemption', meta: REDEMPTION_AURA_META, preDraw: true }, + { name: 'salvation_front', celFile: 'AuraResistAllFront', meta: SALVATION_FRONT_AURA_META, preDraw: false }, + { name: 'salvation_back', celFile: 'AuraResistAllBack', meta: SALVATION_BACK_AURA_META, preDraw: true }, + ] as const + + const PALADIN_COMBAT_OVERLAYS = [ + { name: 'charge', celFile: 'Charge', meta: CHARGE_OVERLAY_META, preDraw: false }, + { name: 'conversion', celFile: 'Conversion', meta: CONVERSION_OVERLAY_META, preDraw: false }, + { name: 'conversioncast', celFile: 'AuraResistColdBackCast', meta: CONVERSION_CAST_OVERLAY_META, preDraw: false }, + { name: 'holy_bolt_cast', celFile: 'HolyBoltCloud', meta: HOLY_BOLT_CAST_OVERLAY_META, preDraw: false }, + { name: 'fist_of_the_heavens_cast', celFile: 'FOACast', meta: FIST_OF_THE_HEAVENS_CAST_OVERLAY_META, preDraw: false }, + { name: 'handofgod', celFile: 'HolyShockHit', meta: HAND_OF_GOD_OVERLAY_META, preDraw: false }, + { name: 'sanctuary_knockback', celFile: 'SanctuaryKnockback', meta: SANCTUARY_KNOCKBACK_OVERLAY_META, preDraw: false }, + { name: 'holy_fire_hit', celFile: 'AuraHolyFireHit', meta: HOLY_FIRE_HIT_OVERLAY_META, preDraw: false }, + { name: 'holy_fire_indicate', celFile: 'AuraHfireIndicate', meta: HOLY_FIRE_INDICATE_OVERLAY_META, preDraw: false }, + { name: 'thorns_hit', celFile: 'AuraThornsHit', meta: THORNS_HIT_OVERLAY_META, preDraw: false }, + { name: 'thorns_indicate', celFile: 'AuraHfireIndicate', meta: THORNS_INDICATE_OVERLAY_META, preDraw: false }, + { name: 'cast_resistfire', celFile: 'AuraResistFireFrontCast', meta: CAST_RESIST_FIRE_OVERLAY_META, preDraw: true }, + { name: 'cast_resistcold', celFile: 'AuraResistColdBackCast', meta: CAST_RESIST_COLD_OVERLAY_META, preDraw: false }, + { name: 'cast_resistlight', celFile: 'AuraResistLightningBackCast', meta: CAST_RESIST_LIGHTNING_OVERLAY_META, preDraw: false }, + { name: 'cast_resistall', celFile: 'AuraResistAllCast', meta: CAST_RESIST_ALL_OVERLAY_META, preDraw: true }, + { name: 'stun', celFile: 'Stun', meta: STUN_OVERLAY_META, preDraw: false }, + ] as const + + const ALL_PALADIN_OVERLAYS = [...PALADIN_AURAS, ...PALADIN_COMBAT_OVERLAYS] + + describe('Suite 1: Physical Asset Existence & File Mirroring', () => { + it('1.1 Verifies all 6 Paladin missile PNG and JSON files exist in public/missiles and samples/d2-packs/missiles', () => { + for (const m of PALADIN_MISSILES) { + for (const dir of [publicMissilesDir, packMissilesDir]) { + const pngPath = path.join(dir, `${m.name}.png`) + const jsonPath = path.join(dir, `${m.name}.json`) + + expect(fs.existsSync(pngPath), `Missing missile PNG: ${pngPath}`).toBe(true) + expect(fs.existsSync(jsonPath), `Missing missile JSON: ${jsonPath}`).toBe(true) + + const stat = fs.statSync(pngPath) + expect(stat.size, `${pngPath} file size must be > 1000 bytes`).toBeGreaterThan(1000) + + const buf = fs.readFileSync(pngPath) + expect(buf[0]).toBe(0x89) + expect(buf[1]).toBe(0x50) // 'P' + expect(buf[2]).toBe(0x4e) // 'N' + expect(buf[3]).toBe(0x47) // 'G' + } + } + }) + + it('1.2 Verifies all Paladin overlay PNG and JSON files exist in public/overlays and samples/d2-packs/overlays', () => { + for (const o of ALL_PALADIN_OVERLAYS) { + for (const dir of [publicOverlaysDir, packOverlaysDir]) { + const pngPath = path.join(dir, `${o.name}.png`) + const jsonPath = path.join(dir, `${o.name}.json`) + + expect(fs.existsSync(pngPath), `Missing overlay PNG: ${pngPath}`).toBe(true) + expect(fs.existsSync(jsonPath), `Missing overlay JSON: ${jsonPath}`).toBe(true) + + const stat = fs.statSync(pngPath) + expect(stat.size, `${pngPath} file size must be > 1000 bytes`).toBeGreaterThan(1000) + + const buf = fs.readFileSync(pngPath) + expect(buf[0]).toBe(0x89) + expect(buf[1]).toBe(0x50) + expect(buf[2]).toBe(0x4e) + expect(buf[3]).toBe(0x47) + } + } + }) + }) + + describe('Suite 2: Metadata Registry & Frame Geometry Invariants', () => { + it('2.1 Verifies Paladin missiles metadata schema and geometry bounds', () => { + for (const m of PALADIN_MISSILES) { + const meta = MISSILE_METAS[m.name] + expect(meta, `MISSILE_METAS missing ${m.name}`).toBeDefined() + expect(meta!.name).toBe(m.name) + expect(meta!.celFile).toBe(m.celFile) + expect(meta!.width).toBeGreaterThan(0) + expect(meta!.height).toBeGreaterThan(0) + expect(meta!.directions).toBeGreaterThan(0) + expect(meta!.framesPerDirection).toBeGreaterThan(0) + expect(meta!.animSpeed).toBe(16) + expect(meta!.groups.length).toBe(meta!.directions) + + for (const group of meta!.groups) { + expect(group.length).toBe(meta!.framesPerDirection) + for (const [x, y, w, h, ax, ay] of group) { + expect(x).toBeGreaterThanOrEqual(0) + expect(y).toBeGreaterThanOrEqual(0) + expect(x + w).toBeLessThanOrEqual(meta!.width) + expect(y + h).toBeLessThanOrEqual(meta!.height) + expect(w).toBeGreaterThan(0) + expect(h).toBeGreaterThan(0) + expect(typeof ax).toBe('number') + expect(typeof ay).toBe('number') + } + } + } + }) + + it('2.2 Verifies Paladin overlays metadata schema, frames, and preDraw flags', () => { + for (const o of ALL_PALADIN_OVERLAYS) { + const meta = OVERLAY_METAS[o.name] + expect(meta, `OVERLAY_METAS missing ${o.name}`).toBeDefined() + expect(meta!.name).toBe(o.name) + expect(meta!.celFile).toBe(o.celFile) + expect(meta!.width).toBeGreaterThan(0) + expect(meta!.height).toBeGreaterThan(0) + expect(meta!.directions).toBe(1) + expect(meta!.frames).toBeGreaterThan(0) + expect(meta!.framesPerDirection).toBe(meta!.frames) + expect(meta!.animRate).toBeGreaterThan(0) + expect(meta!.trans).toBe(3) + expect(meta!.preDraw).toBe(o.preDraw) + expect(meta!.groups.length).toBe(1) + expect(meta!.groups[0]?.length).toBe(meta!.frames) + + for (const [x, y, w, h, ax, ay] of meta!.groups[0]!) { + expect(x).toBeGreaterThanOrEqual(0) + expect(y).toBeGreaterThanOrEqual(0) + expect(x + w).toBeLessThanOrEqual(meta!.width) + expect(y + h).toBeLessThanOrEqual(meta!.height) + expect(w).toBeGreaterThan(0) + expect(h).toBeGreaterThan(0) + expect(typeof ax).toBe('number') + expect(typeof ay).toBe('number') + } + } + }) + + it('2.3 Verifies CelFile and alias lookups in MISSILE_METAS and OVERLAY_METAS', () => { + // Missile CelFiles & aliases + expect(MISSILE_METAS['HolyBoltMissile']).toBe(HOLYBOLT_META) + expect(MISSILE_METAS['blessedhammer']).toBe(BLESSEDHAMMER_META) + expect(MISSILE_METAS['FOAorbiter']).toBe(FOA_META) + expect(MISSILE_METAS['BloodSmall01']).toBe(BLOOD1_META) + + // Overlay CelFiles & aliases + expect(OVERLAY_METAS['Charge']).toBe(CHARGE_OVERLAY_META) + expect(OVERLAY_METAS['Conversion']).toBe(CONVERSION_OVERLAY_META) + expect(OVERLAY_METAS['conversionaura']).toBe(CONVERSION_OVERLAY_META) + expect(OVERLAY_METAS['HolyBoltCloud']).toBe(HOLY_BOLT_CAST_OVERLAY_META) + expect(OVERLAY_METAS['cast_undead']).toBe(HOLY_BOLT_CAST_OVERLAY_META) + expect(OVERLAY_METAS['FOACast']).toBe(FIST_OF_THE_HEAVENS_CAST_OVERLAY_META) + expect(OVERLAY_METAS['cast_fistofares']).toBe(FIST_OF_THE_HEAVENS_CAST_OVERLAY_META) + expect(OVERLAY_METAS['handofgod']).toBe(HAND_OF_GOD_OVERLAY_META) + expect(OVERLAY_METAS['fist_of_the_heavens_hit']).toBe(HAND_OF_GOD_OVERLAY_META) + expect(OVERLAY_METAS['SanctuaryKnockback']).toBe(SANCTUARY_KNOCKBACK_OVERLAY_META) + expect(OVERLAY_METAS['sanctuaryknockback']).toBe(SANCTUARY_KNOCKBACK_OVERLAY_META) + expect(OVERLAY_METAS['Stun']).toBe(STUN_OVERLAY_META) + expect(OVERLAY_METAS['stun']).toBe(STUN_OVERLAY_META) + }) + }) + + describe('Suite 3: PreDraw & Aura Stacking Rules', () => { + it('3.1 Validates dual-layer preDraw invariant: back auras/rings are preDraw:true, front auras/hits are preDraw:false', () => { + // All back auras must be preDraw: true + const backAuras = [ + MIGHT_BACK_AURA_META, + PRAYER_BACK_AURA_META, + HOLY_FIRE_BACK_AURA_META, + THORNS_BACK_AURA_META, + DEFIANCE_BACK_AURA_META, + BLESSED_AIM_BACK_AURA_META, + CLEANSING_BACK_AURA_META, + CONCENTRATION_BACK_AURA_META, + VIGOR_BACK_AURA_META, + HOLY_SHOCK_BACK_AURA_META, + SANCTUARY_BACK_AURA_META, + FANATICISM_BACK_AURA_META, + SALVATION_BACK_AURA_META, + ] + for (const meta of backAuras) { + expect(meta.preDraw, `${meta.name} must have preDraw === true`).toBe(true) + } + + // Ground rings must be preDraw: true + const groundRings = [ + RESIST_FIRE_AURA_META, + RESIST_COLD_AURA_META, + RESIST_LIGHTNING_AURA_META, + HOLY_FREEZE_AURA_META, + CONVICTION_AURA_META, + REDEMPTION_AURA_META, + SANCTUARY_FRONT_AURA_META, + ] + for (const meta of groundRings) { + expect(meta.preDraw, `${meta.name} must have preDraw === true`).toBe(true) + } + + // Front auras must be preDraw: false + const frontAuras = [ + MIGHT_FRONT_AURA_META, + PRAYER_FRONT_AURA_META, + HOLY_FIRE_FRONT_AURA_META, + THORNS_FRONT_AURA_META, + DEFIANCE_FRONT_AURA_META, + BLESSED_AIM_FRONT_AURA_META, + CLEANSING_FRONT_AURA_META, + CONCENTRATION_FRONT_AURA_META, + VIGOR_FRONT_AURA_META, + HOLY_SHOCK_FRONT_AURA_META, + FANATICISM_FRONT_AURA_META, + SALVATION_FRONT_AURA_META, + MEDITATION_AURA_META, + ] + for (const meta of frontAuras) { + expect(meta.preDraw, `${meta.name} must have preDraw === false`).toBe(false) + } + + // Combat hits, casts, and indicators + expect(CHARGE_OVERLAY_META.preDraw).toBe(false) + expect(CONVERSION_OVERLAY_META.preDraw).toBe(false) + expect(CONVERSION_CAST_OVERLAY_META.preDraw).toBe(false) + expect(HOLY_BOLT_CAST_OVERLAY_META.preDraw).toBe(false) + expect(FIST_OF_THE_HEAVENS_CAST_OVERLAY_META.preDraw).toBe(false) + expect(HAND_OF_GOD_OVERLAY_META.preDraw).toBe(false) + expect(SANCTUARY_KNOCKBACK_OVERLAY_META.preDraw).toBe(false) + expect(HOLY_FIRE_HIT_OVERLAY_META.preDraw).toBe(false) + expect(HOLY_FIRE_INDICATE_OVERLAY_META.preDraw).toBe(false) + expect(THORNS_HIT_OVERLAY_META.preDraw).toBe(false) + expect(THORNS_INDICATE_OVERLAY_META.preDraw).toBe(false) + expect(CAST_RESIST_FIRE_OVERLAY_META.preDraw).toBe(true) + expect(CAST_RESIST_COLD_OVERLAY_META.preDraw).toBe(false) + expect(CAST_RESIST_LIGHTNING_OVERLAY_META.preDraw).toBe(false) + expect(CAST_RESIST_ALL_OVERLAY_META.preDraw).toBe(true) + expect(STUN_OVERLAY_META.preDraw).toBe(false) + }) + }) + + describe('Suite 4: 32-bit RGBA & Dark Halo Suppression (Zero Black Borders)', () => { + it('4.1 Verifies all baked Paladin missiles have 32-bit RGBA and zero dark boundary artifact pixels', () => { + for (const m of PALADIN_MISSILES) { + const pngPath = path.join(publicMissilesDir, `${m.name}.png`) + const buf = fs.readFileSync(pngPath) + const decoded = decodeRgbaPng(buf) + + expect(decoded.colorType, `${m.name}.png must be 32-bit RGBA (colorType 6)`).toBe(6) + expect(decoded.bitDepth, `${m.name}.png bitDepth must be 8`).toBe(8) + + let blackOpaqueCount = 0 + let visibleCount = 0 + let gradientCount = 0 + + for (let i = 0; i < decoded.pixels.length; i += 4) { + const r = decoded.pixels[i]! + const g = decoded.pixels[i + 1]! + const b = decoded.pixels[i + 2]! + const a = decoded.pixels[i + 3]! + const maxVal = Math.max(r, g, b) + + // Threshold invariant: max(r,g,b) <= 4 must have alpha === 0 + if (maxVal <= 4 && a > 0) { + blackOpaqueCount++ + } + if (maxVal >= 30 && a > 0) { + visibleCount++ + } + if (maxVal > 4 && maxVal < 60 && a > 0 && a < 255) { + gradientCount++ + } + } + + expect(blackOpaqueCount, `${m.name}.png contains ${blackOpaqueCount} dark boundary artifact pixels`).toBe(0) + expect(visibleCount, `${m.name}.png must contain visible spell pixels`).toBeGreaterThan(0) + expect(gradientCount, `${m.name}.png must contain anti-aliased edge gradient pixels`).toBeGreaterThan(0) + } + }) + + it('4.2 Verifies all baked Paladin overlays have 32-bit RGBA and zero dark boundary artifact pixels', () => { + for (const o of ALL_PALADIN_OVERLAYS) { + const pngPath = path.join(publicOverlaysDir, `${o.name}.png`) + const buf = fs.readFileSync(pngPath) + const decoded = decodeRgbaPng(buf) + + expect(decoded.colorType, `${o.name}.png must be 32-bit RGBA (colorType 6)`).toBe(6) + expect(decoded.bitDepth, `${o.name}.png bitDepth must be 8`).toBe(8) + + let blackOpaqueCount = 0 + let visibleCount = 0 + + for (let i = 0; i < decoded.pixels.length; i += 4) { + const r = decoded.pixels[i]! + const g = decoded.pixels[i + 1]! + const b = decoded.pixels[i + 2]! + const a = decoded.pixels[i + 3]! + const maxVal = Math.max(r, g, b) + + // Threshold invariant: max(r,g,b) <= 4 must have alpha === 0 + if (maxVal <= 4 && a > 0) { + blackOpaqueCount++ + } + if (maxVal >= 30 && a > 0) { + visibleCount++ + } + } + + expect(blackOpaqueCount, `${o.name}.png contains ${blackOpaqueCount} dark boundary artifact pixels`).toBe(0) + expect(visibleCount, `${o.name}.png must contain visible overlay pixels`).toBeGreaterThan(0) + } + }) + }) +})