diff --git a/public/overlays/AuraDefianceFront.json b/public/overlays/AuraDefianceFront.json new file mode 100644 index 0000000..3dabfd0 --- /dev/null +++ b/public/overlays/AuraDefianceFront.json @@ -0,0 +1,148 @@ +{ + "name": "defiance", + "celFile": "AuraDefianceFront", + "width": 512, + "height": 143, + "directions": 1, + "frames": 15, + "framesPerDirection": 15, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -38, + "top": -24, + "width": 74, + "height": 47 + }, + "groups": [ + [ + [ + 0, + 0, + 74, + 47, + -38, + -24 + ], + [ + 75, + 0, + 74, + 47, + -38, + -24 + ], + [ + 150, + 0, + 74, + 47, + -38, + -24 + ], + [ + 225, + 0, + 74, + 47, + -38, + -24 + ], + [ + 300, + 0, + 74, + 47, + -38, + -24 + ], + [ + 375, + 0, + 74, + 47, + -38, + -24 + ], + [ + 0, + 48, + 74, + 47, + -38, + -24 + ], + [ + 75, + 48, + 74, + 47, + -38, + -24 + ], + [ + 150, + 48, + 74, + 47, + -38, + -24 + ], + [ + 225, + 48, + 74, + 47, + -38, + -24 + ], + [ + 300, + 48, + 74, + 47, + -38, + -24 + ], + [ + 375, + 48, + 74, + 47, + -38, + -24 + ], + [ + 0, + 96, + 74, + 47, + -38, + -24 + ], + [ + 75, + 96, + 74, + 47, + -38, + -24 + ], + [ + 150, + 96, + 74, + 47, + -38, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/AuraDefianceFront.png b/public/overlays/AuraDefianceFront.png new file mode 100644 index 0000000..ece2e66 Binary files /dev/null and b/public/overlays/AuraDefianceFront.png differ diff --git a/public/overlays/AuraHolyFireFront.json b/public/overlays/AuraHolyFireFront.json new file mode 100644 index 0000000..112ad51 --- /dev/null +++ b/public/overlays/AuraHolyFireFront.json @@ -0,0 +1,180 @@ +{ + "name": "holy_fire", + "celFile": "AuraHolyFireFront", + "width": 512, + "height": 143, + "directions": 1, + "frames": 19, + "framesPerDirection": 19, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -44, + "top": -10, + "width": 89, + "height": 35 + }, + "groups": [ + [ + [ + 0, + 0, + 89, + 35, + -44, + -10 + ], + [ + 90, + 0, + 89, + 35, + -44, + -10 + ], + [ + 180, + 0, + 89, + 35, + -44, + -10 + ], + [ + 270, + 0, + 89, + 35, + -44, + -10 + ], + [ + 360, + 0, + 89, + 35, + -44, + -10 + ], + [ + 0, + 36, + 89, + 35, + -44, + -10 + ], + [ + 90, + 36, + 89, + 35, + -44, + -10 + ], + [ + 180, + 36, + 89, + 35, + -44, + -10 + ], + [ + 270, + 36, + 89, + 35, + -44, + -10 + ], + [ + 360, + 36, + 89, + 35, + -44, + -10 + ], + [ + 0, + 72, + 89, + 35, + -44, + -10 + ], + [ + 90, + 72, + 89, + 35, + -44, + -10 + ], + [ + 180, + 72, + 89, + 35, + -44, + -10 + ], + [ + 270, + 72, + 89, + 35, + -44, + -10 + ], + [ + 360, + 72, + 89, + 35, + -44, + -10 + ], + [ + 0, + 108, + 89, + 35, + -44, + -10 + ], + [ + 90, + 108, + 89, + 35, + -44, + -10 + ], + [ + 180, + 108, + 89, + 35, + -44, + -10 + ], + [ + 270, + 108, + 89, + 35, + -44, + -10 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/AuraHolyFireFront.png b/public/overlays/AuraHolyFireFront.png new file mode 100644 index 0000000..2f8d579 Binary files /dev/null and b/public/overlays/AuraHolyFireFront.png differ diff --git a/public/overlays/AuraMightFront.json b/public/overlays/AuraMightFront.json new file mode 100644 index 0000000..ae9be5c --- /dev/null +++ b/public/overlays/AuraMightFront.json @@ -0,0 +1,148 @@ +{ + "name": "might", + "celFile": "AuraMightFront", + "width": 512, + "height": 80, + "directions": 1, + "frames": 15, + "framesPerDirection": 15, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -36, + "top": -7, + "width": 72, + "height": 26 + }, + "groups": [ + [ + [ + 0, + 0, + 72, + 26, + -36, + -7 + ], + [ + 73, + 0, + 72, + 26, + -36, + -7 + ], + [ + 146, + 0, + 72, + 26, + -36, + -7 + ], + [ + 219, + 0, + 72, + 26, + -36, + -7 + ], + [ + 292, + 0, + 72, + 26, + -36, + -7 + ], + [ + 365, + 0, + 72, + 26, + -36, + -7 + ], + [ + 438, + 0, + 72, + 26, + -36, + -7 + ], + [ + 0, + 27, + 72, + 26, + -36, + -7 + ], + [ + 73, + 27, + 72, + 26, + -36, + -7 + ], + [ + 146, + 27, + 72, + 26, + -36, + -7 + ], + [ + 219, + 27, + 72, + 26, + -36, + -7 + ], + [ + 292, + 27, + 72, + 26, + -36, + -7 + ], + [ + 365, + 27, + 72, + 26, + -36, + -7 + ], + [ + 438, + 27, + 72, + 26, + -36, + -7 + ], + [ + 0, + 54, + 72, + 26, + -36, + -7 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/AuraMightFront.png b/public/overlays/AuraMightFront.png new file mode 100644 index 0000000..2b94bed Binary files /dev/null and b/public/overlays/AuraMightFront.png differ diff --git a/public/overlays/AuraPrayerFront.json b/public/overlays/AuraPrayerFront.json new file mode 100644 index 0000000..d4a221d --- /dev/null +++ b/public/overlays/AuraPrayerFront.json @@ -0,0 +1,156 @@ +{ + "name": "prayer", + "celFile": "AuraPrayerFront", + "width": 512, + "height": 149, + "directions": 1, + "frames": 16, + "framesPerDirection": 16, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -42, + "top": -23, + "width": 83, + "height": 49 + }, + "groups": [ + [ + [ + 0, + 0, + 83, + 49, + -42, + -23 + ], + [ + 84, + 0, + 83, + 49, + -42, + -23 + ], + [ + 168, + 0, + 83, + 49, + -42, + -23 + ], + [ + 252, + 0, + 83, + 49, + -42, + -23 + ], + [ + 336, + 0, + 83, + 49, + -42, + -23 + ], + [ + 420, + 0, + 83, + 49, + -42, + -23 + ], + [ + 0, + 50, + 83, + 49, + -42, + -23 + ], + [ + 84, + 50, + 83, + 49, + -42, + -23 + ], + [ + 168, + 50, + 83, + 49, + -42, + -23 + ], + [ + 252, + 50, + 83, + 49, + -42, + -23 + ], + [ + 336, + 50, + 83, + 49, + -42, + -23 + ], + [ + 420, + 50, + 83, + 49, + -42, + -23 + ], + [ + 0, + 100, + 83, + 49, + -42, + -23 + ], + [ + 84, + 100, + 83, + 49, + -42, + -23 + ], + [ + 168, + 100, + 83, + 49, + -42, + -23 + ], + [ + 252, + 100, + 83, + 49, + -42, + -23 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/AuraPrayerFront.png b/public/overlays/AuraPrayerFront.png new file mode 100644 index 0000000..9f644fa Binary files /dev/null and b/public/overlays/AuraPrayerFront.png differ diff --git a/public/overlays/AuraResistAllFront.json b/public/overlays/AuraResistAllFront.json new file mode 100644 index 0000000..d807dc0 --- /dev/null +++ b/public/overlays/AuraResistAllFront.json @@ -0,0 +1,188 @@ +{ + "name": "salvation", + "celFile": "AuraResistAllFront", + "width": 512, + "height": 187, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 6, + "lightColor": [ + 211, + 148, + 255 + ], + "box": { + "left": -40, + "top": -24, + "width": 78, + "height": 46 + }, + "groups": [ + [ + [ + 0, + 0, + 78, + 46, + -40, + -24 + ], + [ + 79, + 0, + 78, + 46, + -40, + -24 + ], + [ + 158, + 0, + 78, + 46, + -40, + -24 + ], + [ + 237, + 0, + 78, + 46, + -40, + -24 + ], + [ + 316, + 0, + 78, + 46, + -40, + -24 + ], + [ + 395, + 0, + 78, + 46, + -40, + -24 + ], + [ + 0, + 47, + 78, + 46, + -40, + -24 + ], + [ + 79, + 47, + 78, + 46, + -40, + -24 + ], + [ + 158, + 47, + 78, + 46, + -40, + -24 + ], + [ + 237, + 47, + 78, + 46, + -40, + -24 + ], + [ + 316, + 47, + 78, + 46, + -40, + -24 + ], + [ + 395, + 47, + 78, + 46, + -40, + -24 + ], + [ + 0, + 94, + 78, + 46, + -40, + -24 + ], + [ + 79, + 94, + 78, + 46, + -40, + -24 + ], + [ + 158, + 94, + 78, + 46, + -40, + -24 + ], + [ + 237, + 94, + 78, + 46, + -40, + -24 + ], + [ + 316, + 94, + 78, + 46, + -40, + -24 + ], + [ + 395, + 94, + 78, + 46, + -40, + -24 + ], + [ + 0, + 141, + 78, + 46, + -40, + -24 + ], + [ + 79, + 141, + 78, + 46, + -40, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/AuraResistAllFront.png b/public/overlays/AuraResistAllFront.png new file mode 100644 index 0000000..a7360fc Binary files /dev/null and b/public/overlays/AuraResistAllFront.png differ diff --git a/public/overlays/AuraResistColdBack.json b/public/overlays/AuraResistColdBack.json new file mode 100644 index 0000000..12e4a28 --- /dev/null +++ b/public/overlays/AuraResistColdBack.json @@ -0,0 +1,188 @@ +{ + "name": "resist_cold", + "celFile": "AuraResistColdBack", + "width": 512, + "height": 187, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 6, + "lightColor": [ + 210, + 210, + 255 + ], + "box": { + "left": -41, + "top": -24, + "width": 80, + "height": 46 + }, + "groups": [ + [ + [ + 0, + 0, + 80, + 46, + -41, + -24 + ], + [ + 81, + 0, + 80, + 46, + -41, + -24 + ], + [ + 162, + 0, + 80, + 46, + -41, + -24 + ], + [ + 243, + 0, + 80, + 46, + -41, + -24 + ], + [ + 324, + 0, + 80, + 46, + -41, + -24 + ], + [ + 405, + 0, + 80, + 46, + -41, + -24 + ], + [ + 0, + 47, + 80, + 46, + -41, + -24 + ], + [ + 81, + 47, + 80, + 46, + -41, + -24 + ], + [ + 162, + 47, + 80, + 46, + -41, + -24 + ], + [ + 243, + 47, + 80, + 46, + -41, + -24 + ], + [ + 324, + 47, + 80, + 46, + -41, + -24 + ], + [ + 405, + 47, + 80, + 46, + -41, + -24 + ], + [ + 0, + 94, + 80, + 46, + -41, + -24 + ], + [ + 81, + 94, + 80, + 46, + -41, + -24 + ], + [ + 162, + 94, + 80, + 46, + -41, + -24 + ], + [ + 243, + 94, + 80, + 46, + -41, + -24 + ], + [ + 324, + 94, + 80, + 46, + -41, + -24 + ], + [ + 405, + 94, + 80, + 46, + -41, + -24 + ], + [ + 0, + 141, + 80, + 46, + -41, + -24 + ], + [ + 81, + 141, + 80, + 46, + -41, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/AuraResistColdBack.png b/public/overlays/AuraResistColdBack.png new file mode 100644 index 0000000..037147e Binary files /dev/null and b/public/overlays/AuraResistColdBack.png differ diff --git a/public/overlays/AuraResistFireFront.json b/public/overlays/AuraResistFireFront.json new file mode 100644 index 0000000..3902189 --- /dev/null +++ b/public/overlays/AuraResistFireFront.json @@ -0,0 +1,188 @@ +{ + "name": "resist_fire", + "celFile": "AuraResistFireFront", + "width": 512, + "height": 183, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 6, + "lightColor": [ + 255, + 193, + 103 + ], + "box": { + "left": -40, + "top": -24, + "width": 77, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 77, + 45, + -40, + -24 + ], + [ + 78, + 0, + 77, + 45, + -40, + -24 + ], + [ + 156, + 0, + 77, + 45, + -40, + -24 + ], + [ + 234, + 0, + 77, + 45, + -40, + -24 + ], + [ + 312, + 0, + 77, + 45, + -40, + -24 + ], + [ + 390, + 0, + 77, + 45, + -40, + -24 + ], + [ + 0, + 46, + 77, + 45, + -40, + -24 + ], + [ + 78, + 46, + 77, + 45, + -40, + -24 + ], + [ + 156, + 46, + 77, + 45, + -40, + -24 + ], + [ + 234, + 46, + 77, + 45, + -40, + -24 + ], + [ + 312, + 46, + 77, + 45, + -40, + -24 + ], + [ + 390, + 46, + 77, + 45, + -40, + -24 + ], + [ + 0, + 92, + 77, + 45, + -40, + -24 + ], + [ + 78, + 92, + 77, + 45, + -40, + -24 + ], + [ + 156, + 92, + 77, + 45, + -40, + -24 + ], + [ + 234, + 92, + 77, + 45, + -40, + -24 + ], + [ + 312, + 92, + 77, + 45, + -40, + -24 + ], + [ + 390, + 92, + 77, + 45, + -40, + -24 + ], + [ + 0, + 138, + 77, + 45, + -40, + -24 + ], + [ + 78, + 138, + 77, + 45, + -40, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/AuraResistFireFront.png b/public/overlays/AuraResistFireFront.png new file mode 100644 index 0000000..fa58219 Binary files /dev/null and b/public/overlays/AuraResistFireFront.png differ diff --git a/public/overlays/AuraResistLightningBack.json b/public/overlays/AuraResistLightningBack.json new file mode 100644 index 0000000..e0446ae --- /dev/null +++ b/public/overlays/AuraResistLightningBack.json @@ -0,0 +1,188 @@ +{ + "name": "resist_lightning", + "celFile": "AuraResistLightningBack", + "width": 512, + "height": 183, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 6, + "lightColor": [ + 255, + 255, + 200 + ], + "box": { + "left": -41, + "top": -24, + "width": 79, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 79, + 45, + -41, + -24 + ], + [ + 80, + 0, + 79, + 45, + -41, + -24 + ], + [ + 160, + 0, + 79, + 45, + -41, + -24 + ], + [ + 240, + 0, + 79, + 45, + -41, + -24 + ], + [ + 320, + 0, + 79, + 45, + -41, + -24 + ], + [ + 400, + 0, + 79, + 45, + -41, + -24 + ], + [ + 0, + 46, + 79, + 45, + -41, + -24 + ], + [ + 80, + 46, + 79, + 45, + -41, + -24 + ], + [ + 160, + 46, + 79, + 45, + -41, + -24 + ], + [ + 240, + 46, + 79, + 45, + -41, + -24 + ], + [ + 320, + 46, + 79, + 45, + -41, + -24 + ], + [ + 400, + 46, + 79, + 45, + -41, + -24 + ], + [ + 0, + 92, + 79, + 45, + -41, + -24 + ], + [ + 80, + 92, + 79, + 45, + -41, + -24 + ], + [ + 160, + 92, + 79, + 45, + -41, + -24 + ], + [ + 240, + 92, + 79, + 45, + -41, + -24 + ], + [ + 320, + 92, + 79, + 45, + -41, + -24 + ], + [ + 400, + 92, + 79, + 45, + -41, + -24 + ], + [ + 0, + 138, + 79, + 45, + -41, + -24 + ], + [ + 80, + 138, + 79, + 45, + -41, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/AuraResistLightningBack.png b/public/overlays/AuraResistLightningBack.png new file mode 100644 index 0000000..55c4971 Binary files /dev/null and b/public/overlays/AuraResistLightningBack.png differ diff --git a/public/overlays/AuraThornsFront.json b/public/overlays/AuraThornsFront.json new file mode 100644 index 0000000..ae2fb67 --- /dev/null +++ b/public/overlays/AuraThornsFront.json @@ -0,0 +1,172 @@ +{ + "name": "thorns", + "celFile": "AuraThornsFront", + "width": 512, + "height": 127, + "directions": 1, + "frames": 18, + "framesPerDirection": 18, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -45, + "top": -6, + "width": 89, + "height": 31 + }, + "groups": [ + [ + [ + 0, + 0, + 89, + 31, + -45, + -6 + ], + [ + 90, + 0, + 89, + 31, + -45, + -6 + ], + [ + 180, + 0, + 89, + 31, + -45, + -6 + ], + [ + 270, + 0, + 89, + 31, + -45, + -6 + ], + [ + 360, + 0, + 89, + 31, + -45, + -6 + ], + [ + 0, + 32, + 89, + 31, + -45, + -6 + ], + [ + 90, + 32, + 89, + 31, + -45, + -6 + ], + [ + 180, + 32, + 89, + 31, + -45, + -6 + ], + [ + 270, + 32, + 89, + 31, + -45, + -6 + ], + [ + 360, + 32, + 89, + 31, + -45, + -6 + ], + [ + 0, + 64, + 89, + 31, + -45, + -6 + ], + [ + 90, + 64, + 89, + 31, + -45, + -6 + ], + [ + 180, + 64, + 89, + 31, + -45, + -6 + ], + [ + 270, + 64, + 89, + 31, + -45, + -6 + ], + [ + 360, + 64, + 89, + 31, + -45, + -6 + ], + [ + 0, + 96, + 89, + 31, + -45, + -6 + ], + [ + 90, + 96, + 89, + 31, + -45, + -6 + ], + [ + 180, + 96, + 89, + 31, + -45, + -6 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/AuraThornsFront.png b/public/overlays/AuraThornsFront.png new file mode 100644 index 0000000..22e5f13 Binary files /dev/null and b/public/overlays/AuraThornsFront.png differ diff --git a/public/overlays/BlessedAim_front.json b/public/overlays/BlessedAim_front.json new file mode 100644 index 0000000..71ee686 --- /dev/null +++ b/public/overlays/BlessedAim_front.json @@ -0,0 +1,260 @@ +{ + "name": "blessed_aim", + "celFile": "BlessedAim_front", + "width": 512, + "height": 129, + "directions": 1, + "frames": 29, + "framesPerDirection": 29, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -39, + "top": -5, + "width": 78, + "height": 25 + }, + "groups": [ + [ + [ + 0, + 0, + 78, + 25, + -39, + -5 + ], + [ + 79, + 0, + 78, + 25, + -39, + -5 + ], + [ + 158, + 0, + 78, + 25, + -39, + -5 + ], + [ + 237, + 0, + 78, + 25, + -39, + -5 + ], + [ + 316, + 0, + 78, + 25, + -39, + -5 + ], + [ + 395, + 0, + 78, + 25, + -39, + -5 + ], + [ + 0, + 26, + 78, + 25, + -39, + -5 + ], + [ + 79, + 26, + 78, + 25, + -39, + -5 + ], + [ + 158, + 26, + 78, + 25, + -39, + -5 + ], + [ + 237, + 26, + 78, + 25, + -39, + -5 + ], + [ + 316, + 26, + 78, + 25, + -39, + -5 + ], + [ + 395, + 26, + 78, + 25, + -39, + -5 + ], + [ + 0, + 52, + 78, + 25, + -39, + -5 + ], + [ + 79, + 52, + 78, + 25, + -39, + -5 + ], + [ + 158, + 52, + 78, + 25, + -39, + -5 + ], + [ + 237, + 52, + 78, + 25, + -39, + -5 + ], + [ + 316, + 52, + 78, + 25, + -39, + -5 + ], + [ + 395, + 52, + 78, + 25, + -39, + -5 + ], + [ + 0, + 78, + 78, + 25, + -39, + -5 + ], + [ + 79, + 78, + 78, + 25, + -39, + -5 + ], + [ + 158, + 78, + 78, + 25, + -39, + -5 + ], + [ + 237, + 78, + 78, + 25, + -39, + -5 + ], + [ + 316, + 78, + 78, + 25, + -39, + -5 + ], + [ + 395, + 78, + 78, + 25, + -39, + -5 + ], + [ + 0, + 104, + 78, + 25, + -39, + -5 + ], + [ + 79, + 104, + 78, + 25, + -39, + -5 + ], + [ + 158, + 104, + 78, + 25, + -39, + -5 + ], + [ + 237, + 104, + 78, + 25, + -39, + -5 + ], + [ + 316, + 104, + 78, + 25, + -39, + -5 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/BlessedAim_front.png b/public/overlays/BlessedAim_front.png new file mode 100644 index 0000000..84f8333 Binary files /dev/null and b/public/overlays/BlessedAim_front.png differ diff --git a/public/overlays/Cleansing_front.json b/public/overlays/Cleansing_front.json new file mode 100644 index 0000000..f0e888d --- /dev/null +++ b/public/overlays/Cleansing_front.json @@ -0,0 +1,156 @@ +{ + "name": "cleansing", + "celFile": "Cleansing_front", + "width": 512, + "height": 183, + "directions": 1, + "frames": 16, + "framesPerDirection": 16, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -43, + "top": -11, + "width": 97, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 97, + 45, + -43, + -11 + ], + [ + 98, + 0, + 97, + 45, + -43, + -11 + ], + [ + 196, + 0, + 97, + 45, + -43, + -11 + ], + [ + 294, + 0, + 97, + 45, + -43, + -11 + ], + [ + 392, + 0, + 97, + 45, + -43, + -11 + ], + [ + 0, + 46, + 97, + 45, + -43, + -11 + ], + [ + 98, + 46, + 97, + 45, + -43, + -11 + ], + [ + 196, + 46, + 97, + 45, + -43, + -11 + ], + [ + 294, + 46, + 97, + 45, + -43, + -11 + ], + [ + 392, + 46, + 97, + 45, + -43, + -11 + ], + [ + 0, + 92, + 97, + 45, + -43, + -11 + ], + [ + 98, + 92, + 97, + 45, + -43, + -11 + ], + [ + 196, + 92, + 97, + 45, + -43, + -11 + ], + [ + 294, + 92, + 97, + 45, + -43, + -11 + ], + [ + 392, + 92, + 97, + 45, + -43, + -11 + ], + [ + 0, + 138, + 97, + 45, + -43, + -11 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/Cleansing_front.png b/public/overlays/Cleansing_front.png new file mode 100644 index 0000000..4babe68 Binary files /dev/null and b/public/overlays/Cleansing_front.png differ diff --git a/public/overlays/Concentration_front.json b/public/overlays/Concentration_front.json new file mode 100644 index 0000000..b643b5e --- /dev/null +++ b/public/overlays/Concentration_front.json @@ -0,0 +1,268 @@ +{ + "name": "concentration", + "celFile": "Concentration_front", + "width": 512, + "height": 375, + "directions": 1, + "frames": 30, + "framesPerDirection": 30, + "animRate": 3, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -58, + "top": -12, + "width": 108, + "height": 46 + }, + "groups": [ + [ + [ + 0, + 0, + 108, + 46, + -58, + -12 + ], + [ + 109, + 0, + 108, + 46, + -58, + -12 + ], + [ + 218, + 0, + 108, + 46, + -58, + -12 + ], + [ + 327, + 0, + 108, + 46, + -58, + -12 + ], + [ + 0, + 47, + 108, + 46, + -58, + -12 + ], + [ + 109, + 47, + 108, + 46, + -58, + -12 + ], + [ + 218, + 47, + 108, + 46, + -58, + -12 + ], + [ + 327, + 47, + 108, + 46, + -58, + -12 + ], + [ + 0, + 94, + 108, + 46, + -58, + -12 + ], + [ + 109, + 94, + 108, + 46, + -58, + -12 + ], + [ + 218, + 94, + 108, + 46, + -58, + -12 + ], + [ + 327, + 94, + 108, + 46, + -58, + -12 + ], + [ + 0, + 141, + 108, + 46, + -58, + -12 + ], + [ + 109, + 141, + 108, + 46, + -58, + -12 + ], + [ + 218, + 141, + 108, + 46, + -58, + -12 + ], + [ + 327, + 141, + 108, + 46, + -58, + -12 + ], + [ + 0, + 188, + 108, + 46, + -58, + -12 + ], + [ + 109, + 188, + 108, + 46, + -58, + -12 + ], + [ + 218, + 188, + 108, + 46, + -58, + -12 + ], + [ + 327, + 188, + 108, + 46, + -58, + -12 + ], + [ + 0, + 235, + 108, + 46, + -58, + -12 + ], + [ + 109, + 235, + 108, + 46, + -58, + -12 + ], + [ + 218, + 235, + 108, + 46, + -58, + -12 + ], + [ + 327, + 235, + 108, + 46, + -58, + -12 + ], + [ + 0, + 282, + 108, + 46, + -58, + -12 + ], + [ + 109, + 282, + 108, + 46, + -58, + -12 + ], + [ + 218, + 282, + 108, + 46, + -58, + -12 + ], + [ + 327, + 282, + 108, + 46, + -58, + -12 + ], + [ + 0, + 329, + 108, + 46, + -58, + -12 + ], + [ + 109, + 329, + 108, + 46, + -58, + -12 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/Concentration_front.png b/public/overlays/Concentration_front.png new file mode 100644 index 0000000..cc102f5 Binary files /dev/null and b/public/overlays/Concentration_front.png differ diff --git a/public/overlays/Conviction.json b/public/overlays/Conviction.json new file mode 100644 index 0000000..df84bfa --- /dev/null +++ b/public/overlays/Conviction.json @@ -0,0 +1,196 @@ +{ + "name": "conviction", + "celFile": "Conviction", + "width": 512, + "height": 311, + "directions": 1, + "frames": 21, + "framesPerDirection": 21, + "animRate": 6, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -54, + "top": -26, + "width": 109, + "height": 51 + }, + "groups": [ + [ + [ + 0, + 0, + 109, + 51, + -54, + -26 + ], + [ + 110, + 0, + 109, + 51, + -54, + -26 + ], + [ + 220, + 0, + 109, + 51, + -54, + -26 + ], + [ + 330, + 0, + 109, + 51, + -54, + -26 + ], + [ + 0, + 52, + 109, + 51, + -54, + -26 + ], + [ + 110, + 52, + 109, + 51, + -54, + -26 + ], + [ + 220, + 52, + 109, + 51, + -54, + -26 + ], + [ + 330, + 52, + 109, + 51, + -54, + -26 + ], + [ + 0, + 104, + 109, + 51, + -54, + -26 + ], + [ + 110, + 104, + 109, + 51, + -54, + -26 + ], + [ + 220, + 104, + 109, + 51, + -54, + -26 + ], + [ + 330, + 104, + 109, + 51, + -54, + -26 + ], + [ + 0, + 156, + 109, + 51, + -54, + -26 + ], + [ + 110, + 156, + 109, + 51, + -54, + -26 + ], + [ + 220, + 156, + 109, + 51, + -54, + -26 + ], + [ + 330, + 156, + 109, + 51, + -54, + -26 + ], + [ + 0, + 208, + 109, + 51, + -54, + -26 + ], + [ + 110, + 208, + 109, + 51, + -54, + -26 + ], + [ + 220, + 208, + 109, + 51, + -54, + -26 + ], + [ + 330, + 208, + 109, + 51, + -54, + -26 + ], + [ + 0, + 260, + 109, + 51, + -54, + -26 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/Conviction.png b/public/overlays/Conviction.png new file mode 100644 index 0000000..327bdc9 Binary files /dev/null and b/public/overlays/Conviction.png differ diff --git a/public/overlays/Fanatacism_Back.json b/public/overlays/Fanatacism_Back.json new file mode 100644 index 0000000..a4c73dc --- /dev/null +++ b/public/overlays/Fanatacism_Back.json @@ -0,0 +1,268 @@ +{ + "name": "fanaticism", + "celFile": "Fanatacism_Back", + "width": 512, + "height": 351, + "directions": 1, + "frames": 30, + "framesPerDirection": 30, + "animRate": 6, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -60, + "top": -32, + "width": 122, + "height": 43 + }, + "groups": [ + [ + [ + 0, + 0, + 122, + 43, + -60, + -32 + ], + [ + 123, + 0, + 122, + 43, + -60, + -32 + ], + [ + 246, + 0, + 122, + 43, + -60, + -32 + ], + [ + 369, + 0, + 122, + 43, + -60, + -32 + ], + [ + 0, + 44, + 122, + 43, + -60, + -32 + ], + [ + 123, + 44, + 122, + 43, + -60, + -32 + ], + [ + 246, + 44, + 122, + 43, + -60, + -32 + ], + [ + 369, + 44, + 122, + 43, + -60, + -32 + ], + [ + 0, + 88, + 122, + 43, + -60, + -32 + ], + [ + 123, + 88, + 122, + 43, + -60, + -32 + ], + [ + 246, + 88, + 122, + 43, + -60, + -32 + ], + [ + 369, + 88, + 122, + 43, + -60, + -32 + ], + [ + 0, + 132, + 122, + 43, + -60, + -32 + ], + [ + 123, + 132, + 122, + 43, + -60, + -32 + ], + [ + 246, + 132, + 122, + 43, + -60, + -32 + ], + [ + 369, + 132, + 122, + 43, + -60, + -32 + ], + [ + 0, + 176, + 122, + 43, + -60, + -32 + ], + [ + 123, + 176, + 122, + 43, + -60, + -32 + ], + [ + 246, + 176, + 122, + 43, + -60, + -32 + ], + [ + 369, + 176, + 122, + 43, + -60, + -32 + ], + [ + 0, + 220, + 122, + 43, + -60, + -32 + ], + [ + 123, + 220, + 122, + 43, + -60, + -32 + ], + [ + 246, + 220, + 122, + 43, + -60, + -32 + ], + [ + 369, + 220, + 122, + 43, + -60, + -32 + ], + [ + 0, + 264, + 122, + 43, + -60, + -32 + ], + [ + 123, + 264, + 122, + 43, + -60, + -32 + ], + [ + 246, + 264, + 122, + 43, + -60, + -32 + ], + [ + 369, + 264, + 122, + 43, + -60, + -32 + ], + [ + 0, + 308, + 122, + 43, + -60, + -32 + ], + [ + 123, + 308, + 122, + 43, + -60, + -32 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/Fanatacism_Back.png b/public/overlays/Fanatacism_Back.png new file mode 100644 index 0000000..5feab77 Binary files /dev/null and b/public/overlays/Fanatacism_Back.png differ diff --git a/public/overlays/Fanatacism_Front.json b/public/overlays/Fanatacism_Front.json new file mode 100644 index 0000000..a4c73dc --- /dev/null +++ b/public/overlays/Fanatacism_Front.json @@ -0,0 +1,268 @@ +{ + "name": "fanaticism", + "celFile": "Fanatacism_Back", + "width": 512, + "height": 351, + "directions": 1, + "frames": 30, + "framesPerDirection": 30, + "animRate": 6, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -60, + "top": -32, + "width": 122, + "height": 43 + }, + "groups": [ + [ + [ + 0, + 0, + 122, + 43, + -60, + -32 + ], + [ + 123, + 0, + 122, + 43, + -60, + -32 + ], + [ + 246, + 0, + 122, + 43, + -60, + -32 + ], + [ + 369, + 0, + 122, + 43, + -60, + -32 + ], + [ + 0, + 44, + 122, + 43, + -60, + -32 + ], + [ + 123, + 44, + 122, + 43, + -60, + -32 + ], + [ + 246, + 44, + 122, + 43, + -60, + -32 + ], + [ + 369, + 44, + 122, + 43, + -60, + -32 + ], + [ + 0, + 88, + 122, + 43, + -60, + -32 + ], + [ + 123, + 88, + 122, + 43, + -60, + -32 + ], + [ + 246, + 88, + 122, + 43, + -60, + -32 + ], + [ + 369, + 88, + 122, + 43, + -60, + -32 + ], + [ + 0, + 132, + 122, + 43, + -60, + -32 + ], + [ + 123, + 132, + 122, + 43, + -60, + -32 + ], + [ + 246, + 132, + 122, + 43, + -60, + -32 + ], + [ + 369, + 132, + 122, + 43, + -60, + -32 + ], + [ + 0, + 176, + 122, + 43, + -60, + -32 + ], + [ + 123, + 176, + 122, + 43, + -60, + -32 + ], + [ + 246, + 176, + 122, + 43, + -60, + -32 + ], + [ + 369, + 176, + 122, + 43, + -60, + -32 + ], + [ + 0, + 220, + 122, + 43, + -60, + -32 + ], + [ + 123, + 220, + 122, + 43, + -60, + -32 + ], + [ + 246, + 220, + 122, + 43, + -60, + -32 + ], + [ + 369, + 220, + 122, + 43, + -60, + -32 + ], + [ + 0, + 264, + 122, + 43, + -60, + -32 + ], + [ + 123, + 264, + 122, + 43, + -60, + -32 + ], + [ + 246, + 264, + 122, + 43, + -60, + -32 + ], + [ + 369, + 264, + 122, + 43, + -60, + -32 + ], + [ + 0, + 308, + 122, + 43, + -60, + -32 + ], + [ + 123, + 308, + 122, + 43, + -60, + -32 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/Fanatacism_Front.png b/public/overlays/Fanatacism_Front.png new file mode 100644 index 0000000..5feab77 Binary files /dev/null and b/public/overlays/Fanatacism_Front.png differ diff --git a/public/overlays/FireCast2.png b/public/overlays/FireCast2.png index 109d5a1..dce6ed5 100644 Binary files a/public/overlays/FireCast2.png and b/public/overlays/FireCast2.png differ diff --git a/public/overlays/FireCast_for_Sorceress.png b/public/overlays/FireCast_for_Sorceress.png index 972a2cf..a3a4a09 100644 Binary files a/public/overlays/FireCast_for_Sorceress.png and b/public/overlays/FireCast_for_Sorceress.png differ diff --git a/public/overlays/HolyFreeze.json b/public/overlays/HolyFreeze.json new file mode 100644 index 0000000..c4bc81c --- /dev/null +++ b/public/overlays/HolyFreeze.json @@ -0,0 +1,148 @@ +{ + "name": "holy_freeze", + "celFile": "HolyFreeze", + "width": 512, + "height": 375, + "directions": 1, + "frames": 15, + "framesPerDirection": 15, + "animRate": 8, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -57, + "top": -50, + "width": 114, + "height": 93 + }, + "groups": [ + [ + [ + 0, + 0, + 114, + 93, + -57, + -50 + ], + [ + 115, + 0, + 114, + 93, + -57, + -50 + ], + [ + 230, + 0, + 114, + 93, + -57, + -50 + ], + [ + 345, + 0, + 114, + 93, + -57, + -50 + ], + [ + 0, + 94, + 114, + 93, + -57, + -50 + ], + [ + 115, + 94, + 114, + 93, + -57, + -50 + ], + [ + 230, + 94, + 114, + 93, + -57, + -50 + ], + [ + 345, + 94, + 114, + 93, + -57, + -50 + ], + [ + 0, + 188, + 114, + 93, + -57, + -50 + ], + [ + 115, + 188, + 114, + 93, + -57, + -50 + ], + [ + 230, + 188, + 114, + 93, + -57, + -50 + ], + [ + 345, + 188, + 114, + 93, + -57, + -50 + ], + [ + 0, + 282, + 114, + 93, + -57, + -50 + ], + [ + 115, + 282, + 114, + 93, + -57, + -50 + ], + [ + 230, + 282, + 114, + 93, + -57, + -50 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/HolyFreeze.png b/public/overlays/HolyFreeze.png new file mode 100644 index 0000000..9a6491a Binary files /dev/null and b/public/overlays/HolyFreeze.png differ diff --git a/public/overlays/HolyShock_front.json b/public/overlays/HolyShock_front.json new file mode 100644 index 0000000..777c9f3 --- /dev/null +++ b/public/overlays/HolyShock_front.json @@ -0,0 +1,140 @@ +{ + "name": "holy_shock", + "celFile": "HolyShock_front", + "width": 512, + "height": 51, + "directions": 1, + "frames": 14, + "framesPerDirection": 14, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -37, + "top": -5, + "width": 72, + "height": 25 + }, + "groups": [ + [ + [ + 0, + 0, + 72, + 25, + -37, + -5 + ], + [ + 73, + 0, + 72, + 25, + -37, + -5 + ], + [ + 146, + 0, + 72, + 25, + -37, + -5 + ], + [ + 219, + 0, + 72, + 25, + -37, + -5 + ], + [ + 292, + 0, + 72, + 25, + -37, + -5 + ], + [ + 365, + 0, + 72, + 25, + -37, + -5 + ], + [ + 438, + 0, + 72, + 25, + -37, + -5 + ], + [ + 0, + 26, + 72, + 25, + -37, + -5 + ], + [ + 73, + 26, + 72, + 25, + -37, + -5 + ], + [ + 146, + 26, + 72, + 25, + -37, + -5 + ], + [ + 219, + 26, + 72, + 25, + -37, + -5 + ], + [ + 292, + 26, + 72, + 25, + -37, + -5 + ], + [ + 365, + 26, + 72, + 25, + -37, + -5 + ], + [ + 438, + 26, + 72, + 25, + -37, + -5 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/HolyShock_front.png b/public/overlays/HolyShock_front.png new file mode 100644 index 0000000..38dc411 Binary files /dev/null and b/public/overlays/HolyShock_front.png differ diff --git a/public/overlays/IceCastNew01.png b/public/overlays/IceCastNew01.png index 286387a..dfc2382 100644 Binary files a/public/overlays/IceCastNew01.png and b/public/overlays/IceCastNew01.png differ diff --git a/public/overlays/IceCastNew02.png b/public/overlays/IceCastNew02.png index fa61d74..e4dc4a7 100644 Binary files a/public/overlays/IceCastNew02.png and b/public/overlays/IceCastNew02.png differ diff --git a/public/overlays/IceCastNew03.png b/public/overlays/IceCastNew03.png index ff47877..b04adaa 100644 Binary files a/public/overlays/IceCastNew03.png and b/public/overlays/IceCastNew03.png differ diff --git a/public/overlays/LightningCast.png b/public/overlays/LightningCast.png index 604ec09..79b060c 100644 Binary files a/public/overlays/LightningCast.png and b/public/overlays/LightningCast.png differ diff --git a/public/overlays/LightningCastRunesFront.png b/public/overlays/LightningCastRunesFront.png index fc5af96..fb90bf4 100644 Binary files a/public/overlays/LightningCastRunesFront.png and b/public/overlays/LightningCastRunesFront.png differ diff --git a/public/overlays/Meditation.json b/public/overlays/Meditation.json new file mode 100644 index 0000000..e39e608 --- /dev/null +++ b/public/overlays/Meditation.json @@ -0,0 +1,188 @@ +{ + "name": "meditation", + "celFile": "Meditation", + "width": 512, + "height": 379, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -49, + "top": -81, + "width": 92, + "height": 94 + }, + "groups": [ + [ + [ + 0, + 0, + 92, + 94, + -49, + -81 + ], + [ + 93, + 0, + 92, + 94, + -49, + -81 + ], + [ + 186, + 0, + 92, + 94, + -49, + -81 + ], + [ + 279, + 0, + 92, + 94, + -49, + -81 + ], + [ + 372, + 0, + 92, + 94, + -49, + -81 + ], + [ + 0, + 95, + 92, + 94, + -49, + -81 + ], + [ + 93, + 95, + 92, + 94, + -49, + -81 + ], + [ + 186, + 95, + 92, + 94, + -49, + -81 + ], + [ + 279, + 95, + 92, + 94, + -49, + -81 + ], + [ + 372, + 95, + 92, + 94, + -49, + -81 + ], + [ + 0, + 190, + 92, + 94, + -49, + -81 + ], + [ + 93, + 190, + 92, + 94, + -49, + -81 + ], + [ + 186, + 190, + 92, + 94, + -49, + -81 + ], + [ + 279, + 190, + 92, + 94, + -49, + -81 + ], + [ + 372, + 190, + 92, + 94, + -49, + -81 + ], + [ + 0, + 285, + 92, + 94, + -49, + -81 + ], + [ + 93, + 285, + 92, + 94, + -49, + -81 + ], + [ + 186, + 285, + 92, + 94, + -49, + -81 + ], + [ + 279, + 285, + 92, + 94, + -49, + -81 + ], + [ + 372, + 285, + 92, + 94, + -49, + -81 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/Meditation.png b/public/overlays/Meditation.png new file mode 100644 index 0000000..8b860d8 Binary files /dev/null and b/public/overlays/Meditation.png differ diff --git a/public/overlays/Redemption.json b/public/overlays/Redemption.json new file mode 100644 index 0000000..03cfdb1 --- /dev/null +++ b/public/overlays/Redemption.json @@ -0,0 +1,124 @@ +{ + "name": "redemption", + "celFile": "Redemption", + "width": 512, + "height": 182, + "directions": 1, + "frames": 12, + "framesPerDirection": 12, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -53, + "top": -27, + "width": 104, + "height": 60 + }, + "groups": [ + [ + [ + 0, + 0, + 104, + 60, + -53, + -27 + ], + [ + 105, + 0, + 104, + 60, + -53, + -27 + ], + [ + 210, + 0, + 104, + 60, + -53, + -27 + ], + [ + 315, + 0, + 104, + 60, + -53, + -27 + ], + [ + 0, + 61, + 104, + 60, + -53, + -27 + ], + [ + 105, + 61, + 104, + 60, + -53, + -27 + ], + [ + 210, + 61, + 104, + 60, + -53, + -27 + ], + [ + 315, + 61, + 104, + 60, + -53, + -27 + ], + [ + 0, + 122, + 104, + 60, + -53, + -27 + ], + [ + 105, + 122, + 104, + 60, + -53, + -27 + ], + [ + 210, + 122, + 104, + 60, + -53, + -27 + ], + [ + 315, + 122, + 104, + 60, + -53, + -27 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/Redemption.png b/public/overlays/Redemption.png new file mode 100644 index 0000000..28fa5fd Binary files /dev/null and b/public/overlays/Redemption.png differ diff --git a/public/overlays/SanctuaryAura_Front.json b/public/overlays/SanctuaryAura_Front.json new file mode 100644 index 0000000..ddd9d7d --- /dev/null +++ b/public/overlays/SanctuaryAura_Front.json @@ -0,0 +1,124 @@ +{ + "name": "sanctuary", + "celFile": "SanctuaryAura_Front", + "width": 512, + "height": 92, + "directions": 1, + "frames": 12, + "framesPerDirection": 12, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -59, + "top": -1, + "width": 119, + "height": 30 + }, + "groups": [ + [ + [ + 0, + 0, + 119, + 30, + -59, + -1 + ], + [ + 120, + 0, + 119, + 30, + -59, + -1 + ], + [ + 240, + 0, + 119, + 30, + -59, + -1 + ], + [ + 360, + 0, + 119, + 30, + -59, + -1 + ], + [ + 0, + 31, + 119, + 30, + -59, + -1 + ], + [ + 120, + 31, + 119, + 30, + -59, + -1 + ], + [ + 240, + 31, + 119, + 30, + -59, + -1 + ], + [ + 360, + 31, + 119, + 30, + -59, + -1 + ], + [ + 0, + 62, + 119, + 30, + -59, + -1 + ], + [ + 120, + 62, + 119, + 30, + -59, + -1 + ], + [ + 240, + 62, + 119, + 30, + -59, + -1 + ], + [ + 360, + 62, + 119, + 30, + -59, + -1 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/SanctuaryAura_Front.png b/public/overlays/SanctuaryAura_Front.png new file mode 100644 index 0000000..79d5c40 Binary files /dev/null and b/public/overlays/SanctuaryAura_Front.png differ diff --git a/public/overlays/Stamina_front.json b/public/overlays/Stamina_front.json new file mode 100644 index 0000000..1438f10 --- /dev/null +++ b/public/overlays/Stamina_front.json @@ -0,0 +1,156 @@ +{ + "name": "vigor", + "celFile": "Stamina_front", + "width": 512, + "height": 187, + "directions": 1, + "frames": 16, + "framesPerDirection": 16, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -44, + "top": -15, + "width": 94, + "height": 46 + }, + "groups": [ + [ + [ + 0, + 0, + 94, + 46, + -44, + -15 + ], + [ + 95, + 0, + 94, + 46, + -44, + -15 + ], + [ + 190, + 0, + 94, + 46, + -44, + -15 + ], + [ + 285, + 0, + 94, + 46, + -44, + -15 + ], + [ + 380, + 0, + 94, + 46, + -44, + -15 + ], + [ + 0, + 47, + 94, + 46, + -44, + -15 + ], + [ + 95, + 47, + 94, + 46, + -44, + -15 + ], + [ + 190, + 47, + 94, + 46, + -44, + -15 + ], + [ + 285, + 47, + 94, + 46, + -44, + -15 + ], + [ + 380, + 47, + 94, + 46, + -44, + -15 + ], + [ + 0, + 94, + 94, + 46, + -44, + -15 + ], + [ + 95, + 94, + 94, + 46, + -44, + -15 + ], + [ + 190, + 94, + 94, + 46, + -44, + -15 + ], + [ + 285, + 94, + 94, + 46, + -44, + -15 + ], + [ + 380, + 94, + 94, + 46, + -44, + -15 + ], + [ + 0, + 141, + 94, + 46, + -44, + -15 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/Stamina_front.png b/public/overlays/Stamina_front.png new file mode 100644 index 0000000..1e4e249 Binary files /dev/null and b/public/overlays/Stamina_front.png differ diff --git a/public/overlays/Teleport.png b/public/overlays/Teleport.png index 8454713..04efeaa 100644 Binary files a/public/overlays/Teleport.png and b/public/overlays/Teleport.png differ diff --git a/public/overlays/aura_defiance.json b/public/overlays/aura_defiance.json new file mode 100644 index 0000000..3dabfd0 --- /dev/null +++ b/public/overlays/aura_defiance.json @@ -0,0 +1,148 @@ +{ + "name": "defiance", + "celFile": "AuraDefianceFront", + "width": 512, + "height": 143, + "directions": 1, + "frames": 15, + "framesPerDirection": 15, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -38, + "top": -24, + "width": 74, + "height": 47 + }, + "groups": [ + [ + [ + 0, + 0, + 74, + 47, + -38, + -24 + ], + [ + 75, + 0, + 74, + 47, + -38, + -24 + ], + [ + 150, + 0, + 74, + 47, + -38, + -24 + ], + [ + 225, + 0, + 74, + 47, + -38, + -24 + ], + [ + 300, + 0, + 74, + 47, + -38, + -24 + ], + [ + 375, + 0, + 74, + 47, + -38, + -24 + ], + [ + 0, + 48, + 74, + 47, + -38, + -24 + ], + [ + 75, + 48, + 74, + 47, + -38, + -24 + ], + [ + 150, + 48, + 74, + 47, + -38, + -24 + ], + [ + 225, + 48, + 74, + 47, + -38, + -24 + ], + [ + 300, + 48, + 74, + 47, + -38, + -24 + ], + [ + 375, + 48, + 74, + 47, + -38, + -24 + ], + [ + 0, + 96, + 74, + 47, + -38, + -24 + ], + [ + 75, + 96, + 74, + 47, + -38, + -24 + ], + [ + 150, + 96, + 74, + 47, + -38, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/aura_defiance.png b/public/overlays/aura_defiance.png new file mode 100644 index 0000000..ece2e66 Binary files /dev/null and b/public/overlays/aura_defiance.png differ diff --git a/public/overlays/aura_defiance_front.json b/public/overlays/aura_defiance_front.json new file mode 100644 index 0000000..3dabfd0 --- /dev/null +++ b/public/overlays/aura_defiance_front.json @@ -0,0 +1,148 @@ +{ + "name": "defiance", + "celFile": "AuraDefianceFront", + "width": 512, + "height": 143, + "directions": 1, + "frames": 15, + "framesPerDirection": 15, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -38, + "top": -24, + "width": 74, + "height": 47 + }, + "groups": [ + [ + [ + 0, + 0, + 74, + 47, + -38, + -24 + ], + [ + 75, + 0, + 74, + 47, + -38, + -24 + ], + [ + 150, + 0, + 74, + 47, + -38, + -24 + ], + [ + 225, + 0, + 74, + 47, + -38, + -24 + ], + [ + 300, + 0, + 74, + 47, + -38, + -24 + ], + [ + 375, + 0, + 74, + 47, + -38, + -24 + ], + [ + 0, + 48, + 74, + 47, + -38, + -24 + ], + [ + 75, + 48, + 74, + 47, + -38, + -24 + ], + [ + 150, + 48, + 74, + 47, + -38, + -24 + ], + [ + 225, + 48, + 74, + 47, + -38, + -24 + ], + [ + 300, + 48, + 74, + 47, + -38, + -24 + ], + [ + 375, + 48, + 74, + 47, + -38, + -24 + ], + [ + 0, + 96, + 74, + 47, + -38, + -24 + ], + [ + 75, + 96, + 74, + 47, + -38, + -24 + ], + [ + 150, + 96, + 74, + 47, + -38, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/aura_defiance_front.png b/public/overlays/aura_defiance_front.png new file mode 100644 index 0000000..ece2e66 Binary files /dev/null and b/public/overlays/aura_defiance_front.png differ diff --git a/public/overlays/aura_fanatic.json b/public/overlays/aura_fanatic.json new file mode 100644 index 0000000..a4c73dc --- /dev/null +++ b/public/overlays/aura_fanatic.json @@ -0,0 +1,268 @@ +{ + "name": "fanaticism", + "celFile": "Fanatacism_Back", + "width": 512, + "height": 351, + "directions": 1, + "frames": 30, + "framesPerDirection": 30, + "animRate": 6, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -60, + "top": -32, + "width": 122, + "height": 43 + }, + "groups": [ + [ + [ + 0, + 0, + 122, + 43, + -60, + -32 + ], + [ + 123, + 0, + 122, + 43, + -60, + -32 + ], + [ + 246, + 0, + 122, + 43, + -60, + -32 + ], + [ + 369, + 0, + 122, + 43, + -60, + -32 + ], + [ + 0, + 44, + 122, + 43, + -60, + -32 + ], + [ + 123, + 44, + 122, + 43, + -60, + -32 + ], + [ + 246, + 44, + 122, + 43, + -60, + -32 + ], + [ + 369, + 44, + 122, + 43, + -60, + -32 + ], + [ + 0, + 88, + 122, + 43, + -60, + -32 + ], + [ + 123, + 88, + 122, + 43, + -60, + -32 + ], + [ + 246, + 88, + 122, + 43, + -60, + -32 + ], + [ + 369, + 88, + 122, + 43, + -60, + -32 + ], + [ + 0, + 132, + 122, + 43, + -60, + -32 + ], + [ + 123, + 132, + 122, + 43, + -60, + -32 + ], + [ + 246, + 132, + 122, + 43, + -60, + -32 + ], + [ + 369, + 132, + 122, + 43, + -60, + -32 + ], + [ + 0, + 176, + 122, + 43, + -60, + -32 + ], + [ + 123, + 176, + 122, + 43, + -60, + -32 + ], + [ + 246, + 176, + 122, + 43, + -60, + -32 + ], + [ + 369, + 176, + 122, + 43, + -60, + -32 + ], + [ + 0, + 220, + 122, + 43, + -60, + -32 + ], + [ + 123, + 220, + 122, + 43, + -60, + -32 + ], + [ + 246, + 220, + 122, + 43, + -60, + -32 + ], + [ + 369, + 220, + 122, + 43, + -60, + -32 + ], + [ + 0, + 264, + 122, + 43, + -60, + -32 + ], + [ + 123, + 264, + 122, + 43, + -60, + -32 + ], + [ + 246, + 264, + 122, + 43, + -60, + -32 + ], + [ + 369, + 264, + 122, + 43, + -60, + -32 + ], + [ + 0, + 308, + 122, + 43, + -60, + -32 + ], + [ + 123, + 308, + 122, + 43, + -60, + -32 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/aura_fanatic.png b/public/overlays/aura_fanatic.png new file mode 100644 index 0000000..5feab77 Binary files /dev/null and b/public/overlays/aura_fanatic.png differ diff --git a/public/overlays/aura_holyfire.json b/public/overlays/aura_holyfire.json new file mode 100644 index 0000000..112ad51 --- /dev/null +++ b/public/overlays/aura_holyfire.json @@ -0,0 +1,180 @@ +{ + "name": "holy_fire", + "celFile": "AuraHolyFireFront", + "width": 512, + "height": 143, + "directions": 1, + "frames": 19, + "framesPerDirection": 19, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -44, + "top": -10, + "width": 89, + "height": 35 + }, + "groups": [ + [ + [ + 0, + 0, + 89, + 35, + -44, + -10 + ], + [ + 90, + 0, + 89, + 35, + -44, + -10 + ], + [ + 180, + 0, + 89, + 35, + -44, + -10 + ], + [ + 270, + 0, + 89, + 35, + -44, + -10 + ], + [ + 360, + 0, + 89, + 35, + -44, + -10 + ], + [ + 0, + 36, + 89, + 35, + -44, + -10 + ], + [ + 90, + 36, + 89, + 35, + -44, + -10 + ], + [ + 180, + 36, + 89, + 35, + -44, + -10 + ], + [ + 270, + 36, + 89, + 35, + -44, + -10 + ], + [ + 360, + 36, + 89, + 35, + -44, + -10 + ], + [ + 0, + 72, + 89, + 35, + -44, + -10 + ], + [ + 90, + 72, + 89, + 35, + -44, + -10 + ], + [ + 180, + 72, + 89, + 35, + -44, + -10 + ], + [ + 270, + 72, + 89, + 35, + -44, + -10 + ], + [ + 360, + 72, + 89, + 35, + -44, + -10 + ], + [ + 0, + 108, + 89, + 35, + -44, + -10 + ], + [ + 90, + 108, + 89, + 35, + -44, + -10 + ], + [ + 180, + 108, + 89, + 35, + -44, + -10 + ], + [ + 270, + 108, + 89, + 35, + -44, + -10 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/aura_holyfire.png b/public/overlays/aura_holyfire.png new file mode 100644 index 0000000..2f8d579 Binary files /dev/null and b/public/overlays/aura_holyfire.png differ diff --git a/public/overlays/aura_holyfire_front.json b/public/overlays/aura_holyfire_front.json new file mode 100644 index 0000000..112ad51 --- /dev/null +++ b/public/overlays/aura_holyfire_front.json @@ -0,0 +1,180 @@ +{ + "name": "holy_fire", + "celFile": "AuraHolyFireFront", + "width": 512, + "height": 143, + "directions": 1, + "frames": 19, + "framesPerDirection": 19, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -44, + "top": -10, + "width": 89, + "height": 35 + }, + "groups": [ + [ + [ + 0, + 0, + 89, + 35, + -44, + -10 + ], + [ + 90, + 0, + 89, + 35, + -44, + -10 + ], + [ + 180, + 0, + 89, + 35, + -44, + -10 + ], + [ + 270, + 0, + 89, + 35, + -44, + -10 + ], + [ + 360, + 0, + 89, + 35, + -44, + -10 + ], + [ + 0, + 36, + 89, + 35, + -44, + -10 + ], + [ + 90, + 36, + 89, + 35, + -44, + -10 + ], + [ + 180, + 36, + 89, + 35, + -44, + -10 + ], + [ + 270, + 36, + 89, + 35, + -44, + -10 + ], + [ + 360, + 36, + 89, + 35, + -44, + -10 + ], + [ + 0, + 72, + 89, + 35, + -44, + -10 + ], + [ + 90, + 72, + 89, + 35, + -44, + -10 + ], + [ + 180, + 72, + 89, + 35, + -44, + -10 + ], + [ + 270, + 72, + 89, + 35, + -44, + -10 + ], + [ + 360, + 72, + 89, + 35, + -44, + -10 + ], + [ + 0, + 108, + 89, + 35, + -44, + -10 + ], + [ + 90, + 108, + 89, + 35, + -44, + -10 + ], + [ + 180, + 108, + 89, + 35, + -44, + -10 + ], + [ + 270, + 108, + 89, + 35, + -44, + -10 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/aura_holyfire_front.png b/public/overlays/aura_holyfire_front.png new file mode 100644 index 0000000..2f8d579 Binary files /dev/null and b/public/overlays/aura_holyfire_front.png differ diff --git a/public/overlays/aura_might.json b/public/overlays/aura_might.json new file mode 100644 index 0000000..ae9be5c --- /dev/null +++ b/public/overlays/aura_might.json @@ -0,0 +1,148 @@ +{ + "name": "might", + "celFile": "AuraMightFront", + "width": 512, + "height": 80, + "directions": 1, + "frames": 15, + "framesPerDirection": 15, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -36, + "top": -7, + "width": 72, + "height": 26 + }, + "groups": [ + [ + [ + 0, + 0, + 72, + 26, + -36, + -7 + ], + [ + 73, + 0, + 72, + 26, + -36, + -7 + ], + [ + 146, + 0, + 72, + 26, + -36, + -7 + ], + [ + 219, + 0, + 72, + 26, + -36, + -7 + ], + [ + 292, + 0, + 72, + 26, + -36, + -7 + ], + [ + 365, + 0, + 72, + 26, + -36, + -7 + ], + [ + 438, + 0, + 72, + 26, + -36, + -7 + ], + [ + 0, + 27, + 72, + 26, + -36, + -7 + ], + [ + 73, + 27, + 72, + 26, + -36, + -7 + ], + [ + 146, + 27, + 72, + 26, + -36, + -7 + ], + [ + 219, + 27, + 72, + 26, + -36, + -7 + ], + [ + 292, + 27, + 72, + 26, + -36, + -7 + ], + [ + 365, + 27, + 72, + 26, + -36, + -7 + ], + [ + 438, + 27, + 72, + 26, + -36, + -7 + ], + [ + 0, + 54, + 72, + 26, + -36, + -7 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/aura_might.png b/public/overlays/aura_might.png new file mode 100644 index 0000000..2b94bed Binary files /dev/null and b/public/overlays/aura_might.png differ diff --git a/public/overlays/aura_might_front.json b/public/overlays/aura_might_front.json new file mode 100644 index 0000000..ae9be5c --- /dev/null +++ b/public/overlays/aura_might_front.json @@ -0,0 +1,148 @@ +{ + "name": "might", + "celFile": "AuraMightFront", + "width": 512, + "height": 80, + "directions": 1, + "frames": 15, + "framesPerDirection": 15, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -36, + "top": -7, + "width": 72, + "height": 26 + }, + "groups": [ + [ + [ + 0, + 0, + 72, + 26, + -36, + -7 + ], + [ + 73, + 0, + 72, + 26, + -36, + -7 + ], + [ + 146, + 0, + 72, + 26, + -36, + -7 + ], + [ + 219, + 0, + 72, + 26, + -36, + -7 + ], + [ + 292, + 0, + 72, + 26, + -36, + -7 + ], + [ + 365, + 0, + 72, + 26, + -36, + -7 + ], + [ + 438, + 0, + 72, + 26, + -36, + -7 + ], + [ + 0, + 27, + 72, + 26, + -36, + -7 + ], + [ + 73, + 27, + 72, + 26, + -36, + -7 + ], + [ + 146, + 27, + 72, + 26, + -36, + -7 + ], + [ + 219, + 27, + 72, + 26, + -36, + -7 + ], + [ + 292, + 27, + 72, + 26, + -36, + -7 + ], + [ + 365, + 27, + 72, + 26, + -36, + -7 + ], + [ + 438, + 27, + 72, + 26, + -36, + -7 + ], + [ + 0, + 54, + 72, + 26, + -36, + -7 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/aura_might_front.png b/public/overlays/aura_might_front.png new file mode 100644 index 0000000..2b94bed Binary files /dev/null and b/public/overlays/aura_might_front.png differ diff --git a/public/overlays/aura_prayer.json b/public/overlays/aura_prayer.json new file mode 100644 index 0000000..d4a221d --- /dev/null +++ b/public/overlays/aura_prayer.json @@ -0,0 +1,156 @@ +{ + "name": "prayer", + "celFile": "AuraPrayerFront", + "width": 512, + "height": 149, + "directions": 1, + "frames": 16, + "framesPerDirection": 16, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -42, + "top": -23, + "width": 83, + "height": 49 + }, + "groups": [ + [ + [ + 0, + 0, + 83, + 49, + -42, + -23 + ], + [ + 84, + 0, + 83, + 49, + -42, + -23 + ], + [ + 168, + 0, + 83, + 49, + -42, + -23 + ], + [ + 252, + 0, + 83, + 49, + -42, + -23 + ], + [ + 336, + 0, + 83, + 49, + -42, + -23 + ], + [ + 420, + 0, + 83, + 49, + -42, + -23 + ], + [ + 0, + 50, + 83, + 49, + -42, + -23 + ], + [ + 84, + 50, + 83, + 49, + -42, + -23 + ], + [ + 168, + 50, + 83, + 49, + -42, + -23 + ], + [ + 252, + 50, + 83, + 49, + -42, + -23 + ], + [ + 336, + 50, + 83, + 49, + -42, + -23 + ], + [ + 420, + 50, + 83, + 49, + -42, + -23 + ], + [ + 0, + 100, + 83, + 49, + -42, + -23 + ], + [ + 84, + 100, + 83, + 49, + -42, + -23 + ], + [ + 168, + 100, + 83, + 49, + -42, + -23 + ], + [ + 252, + 100, + 83, + 49, + -42, + -23 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/aura_prayer.png b/public/overlays/aura_prayer.png new file mode 100644 index 0000000..9f644fa Binary files /dev/null and b/public/overlays/aura_prayer.png differ diff --git a/public/overlays/aura_prayer_front.json b/public/overlays/aura_prayer_front.json new file mode 100644 index 0000000..d4a221d --- /dev/null +++ b/public/overlays/aura_prayer_front.json @@ -0,0 +1,156 @@ +{ + "name": "prayer", + "celFile": "AuraPrayerFront", + "width": 512, + "height": 149, + "directions": 1, + "frames": 16, + "framesPerDirection": 16, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -42, + "top": -23, + "width": 83, + "height": 49 + }, + "groups": [ + [ + [ + 0, + 0, + 83, + 49, + -42, + -23 + ], + [ + 84, + 0, + 83, + 49, + -42, + -23 + ], + [ + 168, + 0, + 83, + 49, + -42, + -23 + ], + [ + 252, + 0, + 83, + 49, + -42, + -23 + ], + [ + 336, + 0, + 83, + 49, + -42, + -23 + ], + [ + 420, + 0, + 83, + 49, + -42, + -23 + ], + [ + 0, + 50, + 83, + 49, + -42, + -23 + ], + [ + 84, + 50, + 83, + 49, + -42, + -23 + ], + [ + 168, + 50, + 83, + 49, + -42, + -23 + ], + [ + 252, + 50, + 83, + 49, + -42, + -23 + ], + [ + 336, + 50, + 83, + 49, + -42, + -23 + ], + [ + 420, + 50, + 83, + 49, + -42, + -23 + ], + [ + 0, + 100, + 83, + 49, + -42, + -23 + ], + [ + 84, + 100, + 83, + 49, + -42, + -23 + ], + [ + 168, + 100, + 83, + 49, + -42, + -23 + ], + [ + 252, + 100, + 83, + 49, + -42, + -23 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/aura_prayer_front.png b/public/overlays/aura_prayer_front.png new file mode 100644 index 0000000..9f644fa Binary files /dev/null and b/public/overlays/aura_prayer_front.png differ diff --git a/public/overlays/aura_resistall.json b/public/overlays/aura_resistall.json new file mode 100644 index 0000000..d807dc0 --- /dev/null +++ b/public/overlays/aura_resistall.json @@ -0,0 +1,188 @@ +{ + "name": "salvation", + "celFile": "AuraResistAllFront", + "width": 512, + "height": 187, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 6, + "lightColor": [ + 211, + 148, + 255 + ], + "box": { + "left": -40, + "top": -24, + "width": 78, + "height": 46 + }, + "groups": [ + [ + [ + 0, + 0, + 78, + 46, + -40, + -24 + ], + [ + 79, + 0, + 78, + 46, + -40, + -24 + ], + [ + 158, + 0, + 78, + 46, + -40, + -24 + ], + [ + 237, + 0, + 78, + 46, + -40, + -24 + ], + [ + 316, + 0, + 78, + 46, + -40, + -24 + ], + [ + 395, + 0, + 78, + 46, + -40, + -24 + ], + [ + 0, + 47, + 78, + 46, + -40, + -24 + ], + [ + 79, + 47, + 78, + 46, + -40, + -24 + ], + [ + 158, + 47, + 78, + 46, + -40, + -24 + ], + [ + 237, + 47, + 78, + 46, + -40, + -24 + ], + [ + 316, + 47, + 78, + 46, + -40, + -24 + ], + [ + 395, + 47, + 78, + 46, + -40, + -24 + ], + [ + 0, + 94, + 78, + 46, + -40, + -24 + ], + [ + 79, + 94, + 78, + 46, + -40, + -24 + ], + [ + 158, + 94, + 78, + 46, + -40, + -24 + ], + [ + 237, + 94, + 78, + 46, + -40, + -24 + ], + [ + 316, + 94, + 78, + 46, + -40, + -24 + ], + [ + 395, + 94, + 78, + 46, + -40, + -24 + ], + [ + 0, + 141, + 78, + 46, + -40, + -24 + ], + [ + 79, + 141, + 78, + 46, + -40, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/aura_resistall.png b/public/overlays/aura_resistall.png new file mode 100644 index 0000000..a7360fc Binary files /dev/null and b/public/overlays/aura_resistall.png differ diff --git a/public/overlays/aura_resistall_front.json b/public/overlays/aura_resistall_front.json new file mode 100644 index 0000000..d807dc0 --- /dev/null +++ b/public/overlays/aura_resistall_front.json @@ -0,0 +1,188 @@ +{ + "name": "salvation", + "celFile": "AuraResistAllFront", + "width": 512, + "height": 187, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 6, + "lightColor": [ + 211, + 148, + 255 + ], + "box": { + "left": -40, + "top": -24, + "width": 78, + "height": 46 + }, + "groups": [ + [ + [ + 0, + 0, + 78, + 46, + -40, + -24 + ], + [ + 79, + 0, + 78, + 46, + -40, + -24 + ], + [ + 158, + 0, + 78, + 46, + -40, + -24 + ], + [ + 237, + 0, + 78, + 46, + -40, + -24 + ], + [ + 316, + 0, + 78, + 46, + -40, + -24 + ], + [ + 395, + 0, + 78, + 46, + -40, + -24 + ], + [ + 0, + 47, + 78, + 46, + -40, + -24 + ], + [ + 79, + 47, + 78, + 46, + -40, + -24 + ], + [ + 158, + 47, + 78, + 46, + -40, + -24 + ], + [ + 237, + 47, + 78, + 46, + -40, + -24 + ], + [ + 316, + 47, + 78, + 46, + -40, + -24 + ], + [ + 395, + 47, + 78, + 46, + -40, + -24 + ], + [ + 0, + 94, + 78, + 46, + -40, + -24 + ], + [ + 79, + 94, + 78, + 46, + -40, + -24 + ], + [ + 158, + 94, + 78, + 46, + -40, + -24 + ], + [ + 237, + 94, + 78, + 46, + -40, + -24 + ], + [ + 316, + 94, + 78, + 46, + -40, + -24 + ], + [ + 395, + 94, + 78, + 46, + -40, + -24 + ], + [ + 0, + 141, + 78, + 46, + -40, + -24 + ], + [ + 79, + 141, + 78, + 46, + -40, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/aura_resistall_front.png b/public/overlays/aura_resistall_front.png new file mode 100644 index 0000000..a7360fc Binary files /dev/null and b/public/overlays/aura_resistall_front.png differ diff --git a/public/overlays/aura_resistcold.json b/public/overlays/aura_resistcold.json new file mode 100644 index 0000000..12e4a28 --- /dev/null +++ b/public/overlays/aura_resistcold.json @@ -0,0 +1,188 @@ +{ + "name": "resist_cold", + "celFile": "AuraResistColdBack", + "width": 512, + "height": 187, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 6, + "lightColor": [ + 210, + 210, + 255 + ], + "box": { + "left": -41, + "top": -24, + "width": 80, + "height": 46 + }, + "groups": [ + [ + [ + 0, + 0, + 80, + 46, + -41, + -24 + ], + [ + 81, + 0, + 80, + 46, + -41, + -24 + ], + [ + 162, + 0, + 80, + 46, + -41, + -24 + ], + [ + 243, + 0, + 80, + 46, + -41, + -24 + ], + [ + 324, + 0, + 80, + 46, + -41, + -24 + ], + [ + 405, + 0, + 80, + 46, + -41, + -24 + ], + [ + 0, + 47, + 80, + 46, + -41, + -24 + ], + [ + 81, + 47, + 80, + 46, + -41, + -24 + ], + [ + 162, + 47, + 80, + 46, + -41, + -24 + ], + [ + 243, + 47, + 80, + 46, + -41, + -24 + ], + [ + 324, + 47, + 80, + 46, + -41, + -24 + ], + [ + 405, + 47, + 80, + 46, + -41, + -24 + ], + [ + 0, + 94, + 80, + 46, + -41, + -24 + ], + [ + 81, + 94, + 80, + 46, + -41, + -24 + ], + [ + 162, + 94, + 80, + 46, + -41, + -24 + ], + [ + 243, + 94, + 80, + 46, + -41, + -24 + ], + [ + 324, + 94, + 80, + 46, + -41, + -24 + ], + [ + 405, + 94, + 80, + 46, + -41, + -24 + ], + [ + 0, + 141, + 80, + 46, + -41, + -24 + ], + [ + 81, + 141, + 80, + 46, + -41, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/aura_resistcold.png b/public/overlays/aura_resistcold.png new file mode 100644 index 0000000..037147e Binary files /dev/null and b/public/overlays/aura_resistcold.png differ diff --git a/public/overlays/aura_resistfire.json b/public/overlays/aura_resistfire.json new file mode 100644 index 0000000..3902189 --- /dev/null +++ b/public/overlays/aura_resistfire.json @@ -0,0 +1,188 @@ +{ + "name": "resist_fire", + "celFile": "AuraResistFireFront", + "width": 512, + "height": 183, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 6, + "lightColor": [ + 255, + 193, + 103 + ], + "box": { + "left": -40, + "top": -24, + "width": 77, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 77, + 45, + -40, + -24 + ], + [ + 78, + 0, + 77, + 45, + -40, + -24 + ], + [ + 156, + 0, + 77, + 45, + -40, + -24 + ], + [ + 234, + 0, + 77, + 45, + -40, + -24 + ], + [ + 312, + 0, + 77, + 45, + -40, + -24 + ], + [ + 390, + 0, + 77, + 45, + -40, + -24 + ], + [ + 0, + 46, + 77, + 45, + -40, + -24 + ], + [ + 78, + 46, + 77, + 45, + -40, + -24 + ], + [ + 156, + 46, + 77, + 45, + -40, + -24 + ], + [ + 234, + 46, + 77, + 45, + -40, + -24 + ], + [ + 312, + 46, + 77, + 45, + -40, + -24 + ], + [ + 390, + 46, + 77, + 45, + -40, + -24 + ], + [ + 0, + 92, + 77, + 45, + -40, + -24 + ], + [ + 78, + 92, + 77, + 45, + -40, + -24 + ], + [ + 156, + 92, + 77, + 45, + -40, + -24 + ], + [ + 234, + 92, + 77, + 45, + -40, + -24 + ], + [ + 312, + 92, + 77, + 45, + -40, + -24 + ], + [ + 390, + 92, + 77, + 45, + -40, + -24 + ], + [ + 0, + 138, + 77, + 45, + -40, + -24 + ], + [ + 78, + 138, + 77, + 45, + -40, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/aura_resistfire.png b/public/overlays/aura_resistfire.png new file mode 100644 index 0000000..fa58219 Binary files /dev/null and b/public/overlays/aura_resistfire.png differ diff --git a/public/overlays/aura_resistlight.json b/public/overlays/aura_resistlight.json new file mode 100644 index 0000000..e0446ae --- /dev/null +++ b/public/overlays/aura_resistlight.json @@ -0,0 +1,188 @@ +{ + "name": "resist_lightning", + "celFile": "AuraResistLightningBack", + "width": 512, + "height": 183, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 6, + "lightColor": [ + 255, + 255, + 200 + ], + "box": { + "left": -41, + "top": -24, + "width": 79, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 79, + 45, + -41, + -24 + ], + [ + 80, + 0, + 79, + 45, + -41, + -24 + ], + [ + 160, + 0, + 79, + 45, + -41, + -24 + ], + [ + 240, + 0, + 79, + 45, + -41, + -24 + ], + [ + 320, + 0, + 79, + 45, + -41, + -24 + ], + [ + 400, + 0, + 79, + 45, + -41, + -24 + ], + [ + 0, + 46, + 79, + 45, + -41, + -24 + ], + [ + 80, + 46, + 79, + 45, + -41, + -24 + ], + [ + 160, + 46, + 79, + 45, + -41, + -24 + ], + [ + 240, + 46, + 79, + 45, + -41, + -24 + ], + [ + 320, + 46, + 79, + 45, + -41, + -24 + ], + [ + 400, + 46, + 79, + 45, + -41, + -24 + ], + [ + 0, + 92, + 79, + 45, + -41, + -24 + ], + [ + 80, + 92, + 79, + 45, + -41, + -24 + ], + [ + 160, + 92, + 79, + 45, + -41, + -24 + ], + [ + 240, + 92, + 79, + 45, + -41, + -24 + ], + [ + 320, + 92, + 79, + 45, + -41, + -24 + ], + [ + 400, + 92, + 79, + 45, + -41, + -24 + ], + [ + 0, + 138, + 79, + 45, + -41, + -24 + ], + [ + 80, + 138, + 79, + 45, + -41, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/aura_resistlight.png b/public/overlays/aura_resistlight.png new file mode 100644 index 0000000..55c4971 Binary files /dev/null and b/public/overlays/aura_resistlight.png differ diff --git a/public/overlays/aura_thorns.json b/public/overlays/aura_thorns.json new file mode 100644 index 0000000..ae2fb67 --- /dev/null +++ b/public/overlays/aura_thorns.json @@ -0,0 +1,172 @@ +{ + "name": "thorns", + "celFile": "AuraThornsFront", + "width": 512, + "height": 127, + "directions": 1, + "frames": 18, + "framesPerDirection": 18, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -45, + "top": -6, + "width": 89, + "height": 31 + }, + "groups": [ + [ + [ + 0, + 0, + 89, + 31, + -45, + -6 + ], + [ + 90, + 0, + 89, + 31, + -45, + -6 + ], + [ + 180, + 0, + 89, + 31, + -45, + -6 + ], + [ + 270, + 0, + 89, + 31, + -45, + -6 + ], + [ + 360, + 0, + 89, + 31, + -45, + -6 + ], + [ + 0, + 32, + 89, + 31, + -45, + -6 + ], + [ + 90, + 32, + 89, + 31, + -45, + -6 + ], + [ + 180, + 32, + 89, + 31, + -45, + -6 + ], + [ + 270, + 32, + 89, + 31, + -45, + -6 + ], + [ + 360, + 32, + 89, + 31, + -45, + -6 + ], + [ + 0, + 64, + 89, + 31, + -45, + -6 + ], + [ + 90, + 64, + 89, + 31, + -45, + -6 + ], + [ + 180, + 64, + 89, + 31, + -45, + -6 + ], + [ + 270, + 64, + 89, + 31, + -45, + -6 + ], + [ + 360, + 64, + 89, + 31, + -45, + -6 + ], + [ + 0, + 96, + 89, + 31, + -45, + -6 + ], + [ + 90, + 96, + 89, + 31, + -45, + -6 + ], + [ + 180, + 96, + 89, + 31, + -45, + -6 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/aura_thorns.png b/public/overlays/aura_thorns.png new file mode 100644 index 0000000..22e5f13 Binary files /dev/null and b/public/overlays/aura_thorns.png differ diff --git a/public/overlays/aura_thorns_front.json b/public/overlays/aura_thorns_front.json new file mode 100644 index 0000000..ae2fb67 --- /dev/null +++ b/public/overlays/aura_thorns_front.json @@ -0,0 +1,172 @@ +{ + "name": "thorns", + "celFile": "AuraThornsFront", + "width": 512, + "height": 127, + "directions": 1, + "frames": 18, + "framesPerDirection": 18, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -45, + "top": -6, + "width": 89, + "height": 31 + }, + "groups": [ + [ + [ + 0, + 0, + 89, + 31, + -45, + -6 + ], + [ + 90, + 0, + 89, + 31, + -45, + -6 + ], + [ + 180, + 0, + 89, + 31, + -45, + -6 + ], + [ + 270, + 0, + 89, + 31, + -45, + -6 + ], + [ + 360, + 0, + 89, + 31, + -45, + -6 + ], + [ + 0, + 32, + 89, + 31, + -45, + -6 + ], + [ + 90, + 32, + 89, + 31, + -45, + -6 + ], + [ + 180, + 32, + 89, + 31, + -45, + -6 + ], + [ + 270, + 32, + 89, + 31, + -45, + -6 + ], + [ + 360, + 32, + 89, + 31, + -45, + -6 + ], + [ + 0, + 64, + 89, + 31, + -45, + -6 + ], + [ + 90, + 64, + 89, + 31, + -45, + -6 + ], + [ + 180, + 64, + 89, + 31, + -45, + -6 + ], + [ + 270, + 64, + 89, + 31, + -45, + -6 + ], + [ + 360, + 64, + 89, + 31, + -45, + -6 + ], + [ + 0, + 96, + 89, + 31, + -45, + -6 + ], + [ + 90, + 96, + 89, + 31, + -45, + -6 + ], + [ + 180, + 96, + 89, + 31, + -45, + -6 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/aura_thorns_front.png b/public/overlays/aura_thorns_front.png new file mode 100644 index 0000000..22e5f13 Binary files /dev/null and b/public/overlays/aura_thorns_front.png differ diff --git a/public/overlays/blessed_aim.json b/public/overlays/blessed_aim.json new file mode 100644 index 0000000..71ee686 --- /dev/null +++ b/public/overlays/blessed_aim.json @@ -0,0 +1,260 @@ +{ + "name": "blessed_aim", + "celFile": "BlessedAim_front", + "width": 512, + "height": 129, + "directions": 1, + "frames": 29, + "framesPerDirection": 29, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -39, + "top": -5, + "width": 78, + "height": 25 + }, + "groups": [ + [ + [ + 0, + 0, + 78, + 25, + -39, + -5 + ], + [ + 79, + 0, + 78, + 25, + -39, + -5 + ], + [ + 158, + 0, + 78, + 25, + -39, + -5 + ], + [ + 237, + 0, + 78, + 25, + -39, + -5 + ], + [ + 316, + 0, + 78, + 25, + -39, + -5 + ], + [ + 395, + 0, + 78, + 25, + -39, + -5 + ], + [ + 0, + 26, + 78, + 25, + -39, + -5 + ], + [ + 79, + 26, + 78, + 25, + -39, + -5 + ], + [ + 158, + 26, + 78, + 25, + -39, + -5 + ], + [ + 237, + 26, + 78, + 25, + -39, + -5 + ], + [ + 316, + 26, + 78, + 25, + -39, + -5 + ], + [ + 395, + 26, + 78, + 25, + -39, + -5 + ], + [ + 0, + 52, + 78, + 25, + -39, + -5 + ], + [ + 79, + 52, + 78, + 25, + -39, + -5 + ], + [ + 158, + 52, + 78, + 25, + -39, + -5 + ], + [ + 237, + 52, + 78, + 25, + -39, + -5 + ], + [ + 316, + 52, + 78, + 25, + -39, + -5 + ], + [ + 395, + 52, + 78, + 25, + -39, + -5 + ], + [ + 0, + 78, + 78, + 25, + -39, + -5 + ], + [ + 79, + 78, + 78, + 25, + -39, + -5 + ], + [ + 158, + 78, + 78, + 25, + -39, + -5 + ], + [ + 237, + 78, + 78, + 25, + -39, + -5 + ], + [ + 316, + 78, + 78, + 25, + -39, + -5 + ], + [ + 395, + 78, + 78, + 25, + -39, + -5 + ], + [ + 0, + 104, + 78, + 25, + -39, + -5 + ], + [ + 79, + 104, + 78, + 25, + -39, + -5 + ], + [ + 158, + 104, + 78, + 25, + -39, + -5 + ], + [ + 237, + 104, + 78, + 25, + -39, + -5 + ], + [ + 316, + 104, + 78, + 25, + -39, + -5 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/blessed_aim.png b/public/overlays/blessed_aim.png new file mode 100644 index 0000000..84f8333 Binary files /dev/null and b/public/overlays/blessed_aim.png differ diff --git a/public/overlays/blessed_aim_front.json b/public/overlays/blessed_aim_front.json new file mode 100644 index 0000000..71ee686 --- /dev/null +++ b/public/overlays/blessed_aim_front.json @@ -0,0 +1,260 @@ +{ + "name": "blessed_aim", + "celFile": "BlessedAim_front", + "width": 512, + "height": 129, + "directions": 1, + "frames": 29, + "framesPerDirection": 29, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -39, + "top": -5, + "width": 78, + "height": 25 + }, + "groups": [ + [ + [ + 0, + 0, + 78, + 25, + -39, + -5 + ], + [ + 79, + 0, + 78, + 25, + -39, + -5 + ], + [ + 158, + 0, + 78, + 25, + -39, + -5 + ], + [ + 237, + 0, + 78, + 25, + -39, + -5 + ], + [ + 316, + 0, + 78, + 25, + -39, + -5 + ], + [ + 395, + 0, + 78, + 25, + -39, + -5 + ], + [ + 0, + 26, + 78, + 25, + -39, + -5 + ], + [ + 79, + 26, + 78, + 25, + -39, + -5 + ], + [ + 158, + 26, + 78, + 25, + -39, + -5 + ], + [ + 237, + 26, + 78, + 25, + -39, + -5 + ], + [ + 316, + 26, + 78, + 25, + -39, + -5 + ], + [ + 395, + 26, + 78, + 25, + -39, + -5 + ], + [ + 0, + 52, + 78, + 25, + -39, + -5 + ], + [ + 79, + 52, + 78, + 25, + -39, + -5 + ], + [ + 158, + 52, + 78, + 25, + -39, + -5 + ], + [ + 237, + 52, + 78, + 25, + -39, + -5 + ], + [ + 316, + 52, + 78, + 25, + -39, + -5 + ], + [ + 395, + 52, + 78, + 25, + -39, + -5 + ], + [ + 0, + 78, + 78, + 25, + -39, + -5 + ], + [ + 79, + 78, + 78, + 25, + -39, + -5 + ], + [ + 158, + 78, + 78, + 25, + -39, + -5 + ], + [ + 237, + 78, + 78, + 25, + -39, + -5 + ], + [ + 316, + 78, + 78, + 25, + -39, + -5 + ], + [ + 395, + 78, + 78, + 25, + -39, + -5 + ], + [ + 0, + 104, + 78, + 25, + -39, + -5 + ], + [ + 79, + 104, + 78, + 25, + -39, + -5 + ], + [ + 158, + 104, + 78, + 25, + -39, + -5 + ], + [ + 237, + 104, + 78, + 25, + -39, + -5 + ], + [ + 316, + 104, + 78, + 25, + -39, + -5 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/blessed_aim_front.png b/public/overlays/blessed_aim_front.png new file mode 100644 index 0000000..84f8333 Binary files /dev/null and b/public/overlays/blessed_aim_front.png differ diff --git a/public/overlays/blessedaimfront.json b/public/overlays/blessedaimfront.json new file mode 100644 index 0000000..71ee686 --- /dev/null +++ b/public/overlays/blessedaimfront.json @@ -0,0 +1,260 @@ +{ + "name": "blessed_aim", + "celFile": "BlessedAim_front", + "width": 512, + "height": 129, + "directions": 1, + "frames": 29, + "framesPerDirection": 29, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -39, + "top": -5, + "width": 78, + "height": 25 + }, + "groups": [ + [ + [ + 0, + 0, + 78, + 25, + -39, + -5 + ], + [ + 79, + 0, + 78, + 25, + -39, + -5 + ], + [ + 158, + 0, + 78, + 25, + -39, + -5 + ], + [ + 237, + 0, + 78, + 25, + -39, + -5 + ], + [ + 316, + 0, + 78, + 25, + -39, + -5 + ], + [ + 395, + 0, + 78, + 25, + -39, + -5 + ], + [ + 0, + 26, + 78, + 25, + -39, + -5 + ], + [ + 79, + 26, + 78, + 25, + -39, + -5 + ], + [ + 158, + 26, + 78, + 25, + -39, + -5 + ], + [ + 237, + 26, + 78, + 25, + -39, + -5 + ], + [ + 316, + 26, + 78, + 25, + -39, + -5 + ], + [ + 395, + 26, + 78, + 25, + -39, + -5 + ], + [ + 0, + 52, + 78, + 25, + -39, + -5 + ], + [ + 79, + 52, + 78, + 25, + -39, + -5 + ], + [ + 158, + 52, + 78, + 25, + -39, + -5 + ], + [ + 237, + 52, + 78, + 25, + -39, + -5 + ], + [ + 316, + 52, + 78, + 25, + -39, + -5 + ], + [ + 395, + 52, + 78, + 25, + -39, + -5 + ], + [ + 0, + 78, + 78, + 25, + -39, + -5 + ], + [ + 79, + 78, + 78, + 25, + -39, + -5 + ], + [ + 158, + 78, + 78, + 25, + -39, + -5 + ], + [ + 237, + 78, + 78, + 25, + -39, + -5 + ], + [ + 316, + 78, + 78, + 25, + -39, + -5 + ], + [ + 395, + 78, + 78, + 25, + -39, + -5 + ], + [ + 0, + 104, + 78, + 25, + -39, + -5 + ], + [ + 79, + 104, + 78, + 25, + -39, + -5 + ], + [ + 158, + 104, + 78, + 25, + -39, + -5 + ], + [ + 237, + 104, + 78, + 25, + -39, + -5 + ], + [ + 316, + 104, + 78, + 25, + -39, + -5 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/blessedaimfront.png b/public/overlays/blessedaimfront.png new file mode 100644 index 0000000..84f8333 Binary files /dev/null and b/public/overlays/blessedaimfront.png differ diff --git a/public/overlays/cleansing.json b/public/overlays/cleansing.json new file mode 100644 index 0000000..f0e888d --- /dev/null +++ b/public/overlays/cleansing.json @@ -0,0 +1,156 @@ +{ + "name": "cleansing", + "celFile": "Cleansing_front", + "width": 512, + "height": 183, + "directions": 1, + "frames": 16, + "framesPerDirection": 16, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -43, + "top": -11, + "width": 97, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 97, + 45, + -43, + -11 + ], + [ + 98, + 0, + 97, + 45, + -43, + -11 + ], + [ + 196, + 0, + 97, + 45, + -43, + -11 + ], + [ + 294, + 0, + 97, + 45, + -43, + -11 + ], + [ + 392, + 0, + 97, + 45, + -43, + -11 + ], + [ + 0, + 46, + 97, + 45, + -43, + -11 + ], + [ + 98, + 46, + 97, + 45, + -43, + -11 + ], + [ + 196, + 46, + 97, + 45, + -43, + -11 + ], + [ + 294, + 46, + 97, + 45, + -43, + -11 + ], + [ + 392, + 46, + 97, + 45, + -43, + -11 + ], + [ + 0, + 92, + 97, + 45, + -43, + -11 + ], + [ + 98, + 92, + 97, + 45, + -43, + -11 + ], + [ + 196, + 92, + 97, + 45, + -43, + -11 + ], + [ + 294, + 92, + 97, + 45, + -43, + -11 + ], + [ + 392, + 92, + 97, + 45, + -43, + -11 + ], + [ + 0, + 138, + 97, + 45, + -43, + -11 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/cleansing.png b/public/overlays/cleansing.png new file mode 100644 index 0000000..4babe68 Binary files /dev/null and b/public/overlays/cleansing.png differ diff --git a/public/overlays/cleansing_front.json b/public/overlays/cleansing_front.json new file mode 100644 index 0000000..f0e888d --- /dev/null +++ b/public/overlays/cleansing_front.json @@ -0,0 +1,156 @@ +{ + "name": "cleansing", + "celFile": "Cleansing_front", + "width": 512, + "height": 183, + "directions": 1, + "frames": 16, + "framesPerDirection": 16, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -43, + "top": -11, + "width": 97, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 97, + 45, + -43, + -11 + ], + [ + 98, + 0, + 97, + 45, + -43, + -11 + ], + [ + 196, + 0, + 97, + 45, + -43, + -11 + ], + [ + 294, + 0, + 97, + 45, + -43, + -11 + ], + [ + 392, + 0, + 97, + 45, + -43, + -11 + ], + [ + 0, + 46, + 97, + 45, + -43, + -11 + ], + [ + 98, + 46, + 97, + 45, + -43, + -11 + ], + [ + 196, + 46, + 97, + 45, + -43, + -11 + ], + [ + 294, + 46, + 97, + 45, + -43, + -11 + ], + [ + 392, + 46, + 97, + 45, + -43, + -11 + ], + [ + 0, + 92, + 97, + 45, + -43, + -11 + ], + [ + 98, + 92, + 97, + 45, + -43, + -11 + ], + [ + 196, + 92, + 97, + 45, + -43, + -11 + ], + [ + 294, + 92, + 97, + 45, + -43, + -11 + ], + [ + 392, + 92, + 97, + 45, + -43, + -11 + ], + [ + 0, + 138, + 97, + 45, + -43, + -11 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/cleansing_front.png b/public/overlays/cleansing_front.png new file mode 100644 index 0000000..4babe68 Binary files /dev/null and b/public/overlays/cleansing_front.png differ diff --git a/public/overlays/cleansingfront.json b/public/overlays/cleansingfront.json new file mode 100644 index 0000000..f0e888d --- /dev/null +++ b/public/overlays/cleansingfront.json @@ -0,0 +1,156 @@ +{ + "name": "cleansing", + "celFile": "Cleansing_front", + "width": 512, + "height": 183, + "directions": 1, + "frames": 16, + "framesPerDirection": 16, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -43, + "top": -11, + "width": 97, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 97, + 45, + -43, + -11 + ], + [ + 98, + 0, + 97, + 45, + -43, + -11 + ], + [ + 196, + 0, + 97, + 45, + -43, + -11 + ], + [ + 294, + 0, + 97, + 45, + -43, + -11 + ], + [ + 392, + 0, + 97, + 45, + -43, + -11 + ], + [ + 0, + 46, + 97, + 45, + -43, + -11 + ], + [ + 98, + 46, + 97, + 45, + -43, + -11 + ], + [ + 196, + 46, + 97, + 45, + -43, + -11 + ], + [ + 294, + 46, + 97, + 45, + -43, + -11 + ], + [ + 392, + 46, + 97, + 45, + -43, + -11 + ], + [ + 0, + 92, + 97, + 45, + -43, + -11 + ], + [ + 98, + 92, + 97, + 45, + -43, + -11 + ], + [ + 196, + 92, + 97, + 45, + -43, + -11 + ], + [ + 294, + 92, + 97, + 45, + -43, + -11 + ], + [ + 392, + 92, + 97, + 45, + -43, + -11 + ], + [ + 0, + 138, + 97, + 45, + -43, + -11 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/cleansingfront.png b/public/overlays/cleansingfront.png new file mode 100644 index 0000000..4babe68 Binary files /dev/null and b/public/overlays/cleansingfront.png differ diff --git a/public/overlays/concentration.json b/public/overlays/concentration.json new file mode 100644 index 0000000..b643b5e --- /dev/null +++ b/public/overlays/concentration.json @@ -0,0 +1,268 @@ +{ + "name": "concentration", + "celFile": "Concentration_front", + "width": 512, + "height": 375, + "directions": 1, + "frames": 30, + "framesPerDirection": 30, + "animRate": 3, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -58, + "top": -12, + "width": 108, + "height": 46 + }, + "groups": [ + [ + [ + 0, + 0, + 108, + 46, + -58, + -12 + ], + [ + 109, + 0, + 108, + 46, + -58, + -12 + ], + [ + 218, + 0, + 108, + 46, + -58, + -12 + ], + [ + 327, + 0, + 108, + 46, + -58, + -12 + ], + [ + 0, + 47, + 108, + 46, + -58, + -12 + ], + [ + 109, + 47, + 108, + 46, + -58, + -12 + ], + [ + 218, + 47, + 108, + 46, + -58, + -12 + ], + [ + 327, + 47, + 108, + 46, + -58, + -12 + ], + [ + 0, + 94, + 108, + 46, + -58, + -12 + ], + [ + 109, + 94, + 108, + 46, + -58, + -12 + ], + [ + 218, + 94, + 108, + 46, + -58, + -12 + ], + [ + 327, + 94, + 108, + 46, + -58, + -12 + ], + [ + 0, + 141, + 108, + 46, + -58, + -12 + ], + [ + 109, + 141, + 108, + 46, + -58, + -12 + ], + [ + 218, + 141, + 108, + 46, + -58, + -12 + ], + [ + 327, + 141, + 108, + 46, + -58, + -12 + ], + [ + 0, + 188, + 108, + 46, + -58, + -12 + ], + [ + 109, + 188, + 108, + 46, + -58, + -12 + ], + [ + 218, + 188, + 108, + 46, + -58, + -12 + ], + [ + 327, + 188, + 108, + 46, + -58, + -12 + ], + [ + 0, + 235, + 108, + 46, + -58, + -12 + ], + [ + 109, + 235, + 108, + 46, + -58, + -12 + ], + [ + 218, + 235, + 108, + 46, + -58, + -12 + ], + [ + 327, + 235, + 108, + 46, + -58, + -12 + ], + [ + 0, + 282, + 108, + 46, + -58, + -12 + ], + [ + 109, + 282, + 108, + 46, + -58, + -12 + ], + [ + 218, + 282, + 108, + 46, + -58, + -12 + ], + [ + 327, + 282, + 108, + 46, + -58, + -12 + ], + [ + 0, + 329, + 108, + 46, + -58, + -12 + ], + [ + 109, + 329, + 108, + 46, + -58, + -12 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/concentration.png b/public/overlays/concentration.png new file mode 100644 index 0000000..cc102f5 Binary files /dev/null and b/public/overlays/concentration.png differ diff --git a/public/overlays/concentration_front.json b/public/overlays/concentration_front.json new file mode 100644 index 0000000..b643b5e --- /dev/null +++ b/public/overlays/concentration_front.json @@ -0,0 +1,268 @@ +{ + "name": "concentration", + "celFile": "Concentration_front", + "width": 512, + "height": 375, + "directions": 1, + "frames": 30, + "framesPerDirection": 30, + "animRate": 3, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -58, + "top": -12, + "width": 108, + "height": 46 + }, + "groups": [ + [ + [ + 0, + 0, + 108, + 46, + -58, + -12 + ], + [ + 109, + 0, + 108, + 46, + -58, + -12 + ], + [ + 218, + 0, + 108, + 46, + -58, + -12 + ], + [ + 327, + 0, + 108, + 46, + -58, + -12 + ], + [ + 0, + 47, + 108, + 46, + -58, + -12 + ], + [ + 109, + 47, + 108, + 46, + -58, + -12 + ], + [ + 218, + 47, + 108, + 46, + -58, + -12 + ], + [ + 327, + 47, + 108, + 46, + -58, + -12 + ], + [ + 0, + 94, + 108, + 46, + -58, + -12 + ], + [ + 109, + 94, + 108, + 46, + -58, + -12 + ], + [ + 218, + 94, + 108, + 46, + -58, + -12 + ], + [ + 327, + 94, + 108, + 46, + -58, + -12 + ], + [ + 0, + 141, + 108, + 46, + -58, + -12 + ], + [ + 109, + 141, + 108, + 46, + -58, + -12 + ], + [ + 218, + 141, + 108, + 46, + -58, + -12 + ], + [ + 327, + 141, + 108, + 46, + -58, + -12 + ], + [ + 0, + 188, + 108, + 46, + -58, + -12 + ], + [ + 109, + 188, + 108, + 46, + -58, + -12 + ], + [ + 218, + 188, + 108, + 46, + -58, + -12 + ], + [ + 327, + 188, + 108, + 46, + -58, + -12 + ], + [ + 0, + 235, + 108, + 46, + -58, + -12 + ], + [ + 109, + 235, + 108, + 46, + -58, + -12 + ], + [ + 218, + 235, + 108, + 46, + -58, + -12 + ], + [ + 327, + 235, + 108, + 46, + -58, + -12 + ], + [ + 0, + 282, + 108, + 46, + -58, + -12 + ], + [ + 109, + 282, + 108, + 46, + -58, + -12 + ], + [ + 218, + 282, + 108, + 46, + -58, + -12 + ], + [ + 327, + 282, + 108, + 46, + -58, + -12 + ], + [ + 0, + 329, + 108, + 46, + -58, + -12 + ], + [ + 109, + 329, + 108, + 46, + -58, + -12 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/concentration_front.png b/public/overlays/concentration_front.png new file mode 100644 index 0000000..cc102f5 Binary files /dev/null and b/public/overlays/concentration_front.png differ diff --git a/public/overlays/concentrationfront.json b/public/overlays/concentrationfront.json new file mode 100644 index 0000000..b643b5e --- /dev/null +++ b/public/overlays/concentrationfront.json @@ -0,0 +1,268 @@ +{ + "name": "concentration", + "celFile": "Concentration_front", + "width": 512, + "height": 375, + "directions": 1, + "frames": 30, + "framesPerDirection": 30, + "animRate": 3, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -58, + "top": -12, + "width": 108, + "height": 46 + }, + "groups": [ + [ + [ + 0, + 0, + 108, + 46, + -58, + -12 + ], + [ + 109, + 0, + 108, + 46, + -58, + -12 + ], + [ + 218, + 0, + 108, + 46, + -58, + -12 + ], + [ + 327, + 0, + 108, + 46, + -58, + -12 + ], + [ + 0, + 47, + 108, + 46, + -58, + -12 + ], + [ + 109, + 47, + 108, + 46, + -58, + -12 + ], + [ + 218, + 47, + 108, + 46, + -58, + -12 + ], + [ + 327, + 47, + 108, + 46, + -58, + -12 + ], + [ + 0, + 94, + 108, + 46, + -58, + -12 + ], + [ + 109, + 94, + 108, + 46, + -58, + -12 + ], + [ + 218, + 94, + 108, + 46, + -58, + -12 + ], + [ + 327, + 94, + 108, + 46, + -58, + -12 + ], + [ + 0, + 141, + 108, + 46, + -58, + -12 + ], + [ + 109, + 141, + 108, + 46, + -58, + -12 + ], + [ + 218, + 141, + 108, + 46, + -58, + -12 + ], + [ + 327, + 141, + 108, + 46, + -58, + -12 + ], + [ + 0, + 188, + 108, + 46, + -58, + -12 + ], + [ + 109, + 188, + 108, + 46, + -58, + -12 + ], + [ + 218, + 188, + 108, + 46, + -58, + -12 + ], + [ + 327, + 188, + 108, + 46, + -58, + -12 + ], + [ + 0, + 235, + 108, + 46, + -58, + -12 + ], + [ + 109, + 235, + 108, + 46, + -58, + -12 + ], + [ + 218, + 235, + 108, + 46, + -58, + -12 + ], + [ + 327, + 235, + 108, + 46, + -58, + -12 + ], + [ + 0, + 282, + 108, + 46, + -58, + -12 + ], + [ + 109, + 282, + 108, + 46, + -58, + -12 + ], + [ + 218, + 282, + 108, + 46, + -58, + -12 + ], + [ + 327, + 282, + 108, + 46, + -58, + -12 + ], + [ + 0, + 329, + 108, + 46, + -58, + -12 + ], + [ + 109, + 329, + 108, + 46, + -58, + -12 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/concentrationfront.png b/public/overlays/concentrationfront.png new file mode 100644 index 0000000..cc102f5 Binary files /dev/null and b/public/overlays/concentrationfront.png differ diff --git a/public/overlays/conviction.json b/public/overlays/conviction.json new file mode 100644 index 0000000..df84bfa --- /dev/null +++ b/public/overlays/conviction.json @@ -0,0 +1,196 @@ +{ + "name": "conviction", + "celFile": "Conviction", + "width": 512, + "height": 311, + "directions": 1, + "frames": 21, + "framesPerDirection": 21, + "animRate": 6, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -54, + "top": -26, + "width": 109, + "height": 51 + }, + "groups": [ + [ + [ + 0, + 0, + 109, + 51, + -54, + -26 + ], + [ + 110, + 0, + 109, + 51, + -54, + -26 + ], + [ + 220, + 0, + 109, + 51, + -54, + -26 + ], + [ + 330, + 0, + 109, + 51, + -54, + -26 + ], + [ + 0, + 52, + 109, + 51, + -54, + -26 + ], + [ + 110, + 52, + 109, + 51, + -54, + -26 + ], + [ + 220, + 52, + 109, + 51, + -54, + -26 + ], + [ + 330, + 52, + 109, + 51, + -54, + -26 + ], + [ + 0, + 104, + 109, + 51, + -54, + -26 + ], + [ + 110, + 104, + 109, + 51, + -54, + -26 + ], + [ + 220, + 104, + 109, + 51, + -54, + -26 + ], + [ + 330, + 104, + 109, + 51, + -54, + -26 + ], + [ + 0, + 156, + 109, + 51, + -54, + -26 + ], + [ + 110, + 156, + 109, + 51, + -54, + -26 + ], + [ + 220, + 156, + 109, + 51, + -54, + -26 + ], + [ + 330, + 156, + 109, + 51, + -54, + -26 + ], + [ + 0, + 208, + 109, + 51, + -54, + -26 + ], + [ + 110, + 208, + 109, + 51, + -54, + -26 + ], + [ + 220, + 208, + 109, + 51, + -54, + -26 + ], + [ + 330, + 208, + 109, + 51, + -54, + -26 + ], + [ + 0, + 260, + 109, + 51, + -54, + -26 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/conviction.png b/public/overlays/conviction.png new file mode 100644 index 0000000..327bdc9 Binary files /dev/null and b/public/overlays/conviction.png differ diff --git a/public/overlays/convictionback.json b/public/overlays/convictionback.json new file mode 100644 index 0000000..df84bfa --- /dev/null +++ b/public/overlays/convictionback.json @@ -0,0 +1,196 @@ +{ + "name": "conviction", + "celFile": "Conviction", + "width": 512, + "height": 311, + "directions": 1, + "frames": 21, + "framesPerDirection": 21, + "animRate": 6, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -54, + "top": -26, + "width": 109, + "height": 51 + }, + "groups": [ + [ + [ + 0, + 0, + 109, + 51, + -54, + -26 + ], + [ + 110, + 0, + 109, + 51, + -54, + -26 + ], + [ + 220, + 0, + 109, + 51, + -54, + -26 + ], + [ + 330, + 0, + 109, + 51, + -54, + -26 + ], + [ + 0, + 52, + 109, + 51, + -54, + -26 + ], + [ + 110, + 52, + 109, + 51, + -54, + -26 + ], + [ + 220, + 52, + 109, + 51, + -54, + -26 + ], + [ + 330, + 52, + 109, + 51, + -54, + -26 + ], + [ + 0, + 104, + 109, + 51, + -54, + -26 + ], + [ + 110, + 104, + 109, + 51, + -54, + -26 + ], + [ + 220, + 104, + 109, + 51, + -54, + -26 + ], + [ + 330, + 104, + 109, + 51, + -54, + -26 + ], + [ + 0, + 156, + 109, + 51, + -54, + -26 + ], + [ + 110, + 156, + 109, + 51, + -54, + -26 + ], + [ + 220, + 156, + 109, + 51, + -54, + -26 + ], + [ + 330, + 156, + 109, + 51, + -54, + -26 + ], + [ + 0, + 208, + 109, + 51, + -54, + -26 + ], + [ + 110, + 208, + 109, + 51, + -54, + -26 + ], + [ + 220, + 208, + 109, + 51, + -54, + -26 + ], + [ + 330, + 208, + 109, + 51, + -54, + -26 + ], + [ + 0, + 260, + 109, + 51, + -54, + -26 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/convictionback.png b/public/overlays/convictionback.png new file mode 100644 index 0000000..327bdc9 Binary files /dev/null and b/public/overlays/convictionback.png differ diff --git a/public/overlays/defiance.json b/public/overlays/defiance.json new file mode 100644 index 0000000..3dabfd0 --- /dev/null +++ b/public/overlays/defiance.json @@ -0,0 +1,148 @@ +{ + "name": "defiance", + "celFile": "AuraDefianceFront", + "width": 512, + "height": 143, + "directions": 1, + "frames": 15, + "framesPerDirection": 15, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -38, + "top": -24, + "width": 74, + "height": 47 + }, + "groups": [ + [ + [ + 0, + 0, + 74, + 47, + -38, + -24 + ], + [ + 75, + 0, + 74, + 47, + -38, + -24 + ], + [ + 150, + 0, + 74, + 47, + -38, + -24 + ], + [ + 225, + 0, + 74, + 47, + -38, + -24 + ], + [ + 300, + 0, + 74, + 47, + -38, + -24 + ], + [ + 375, + 0, + 74, + 47, + -38, + -24 + ], + [ + 0, + 48, + 74, + 47, + -38, + -24 + ], + [ + 75, + 48, + 74, + 47, + -38, + -24 + ], + [ + 150, + 48, + 74, + 47, + -38, + -24 + ], + [ + 225, + 48, + 74, + 47, + -38, + -24 + ], + [ + 300, + 48, + 74, + 47, + -38, + -24 + ], + [ + 375, + 48, + 74, + 47, + -38, + -24 + ], + [ + 0, + 96, + 74, + 47, + -38, + -24 + ], + [ + 75, + 96, + 74, + 47, + -38, + -24 + ], + [ + 150, + 96, + 74, + 47, + -38, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/defiance.png b/public/overlays/defiance.png new file mode 100644 index 0000000..ece2e66 Binary files /dev/null and b/public/overlays/defiance.png differ diff --git a/public/overlays/fanaticism.json b/public/overlays/fanaticism.json new file mode 100644 index 0000000..a4c73dc --- /dev/null +++ b/public/overlays/fanaticism.json @@ -0,0 +1,268 @@ +{ + "name": "fanaticism", + "celFile": "Fanatacism_Back", + "width": 512, + "height": 351, + "directions": 1, + "frames": 30, + "framesPerDirection": 30, + "animRate": 6, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -60, + "top": -32, + "width": 122, + "height": 43 + }, + "groups": [ + [ + [ + 0, + 0, + 122, + 43, + -60, + -32 + ], + [ + 123, + 0, + 122, + 43, + -60, + -32 + ], + [ + 246, + 0, + 122, + 43, + -60, + -32 + ], + [ + 369, + 0, + 122, + 43, + -60, + -32 + ], + [ + 0, + 44, + 122, + 43, + -60, + -32 + ], + [ + 123, + 44, + 122, + 43, + -60, + -32 + ], + [ + 246, + 44, + 122, + 43, + -60, + -32 + ], + [ + 369, + 44, + 122, + 43, + -60, + -32 + ], + [ + 0, + 88, + 122, + 43, + -60, + -32 + ], + [ + 123, + 88, + 122, + 43, + -60, + -32 + ], + [ + 246, + 88, + 122, + 43, + -60, + -32 + ], + [ + 369, + 88, + 122, + 43, + -60, + -32 + ], + [ + 0, + 132, + 122, + 43, + -60, + -32 + ], + [ + 123, + 132, + 122, + 43, + -60, + -32 + ], + [ + 246, + 132, + 122, + 43, + -60, + -32 + ], + [ + 369, + 132, + 122, + 43, + -60, + -32 + ], + [ + 0, + 176, + 122, + 43, + -60, + -32 + ], + [ + 123, + 176, + 122, + 43, + -60, + -32 + ], + [ + 246, + 176, + 122, + 43, + -60, + -32 + ], + [ + 369, + 176, + 122, + 43, + -60, + -32 + ], + [ + 0, + 220, + 122, + 43, + -60, + -32 + ], + [ + 123, + 220, + 122, + 43, + -60, + -32 + ], + [ + 246, + 220, + 122, + 43, + -60, + -32 + ], + [ + 369, + 220, + 122, + 43, + -60, + -32 + ], + [ + 0, + 264, + 122, + 43, + -60, + -32 + ], + [ + 123, + 264, + 122, + 43, + -60, + -32 + ], + [ + 246, + 264, + 122, + 43, + -60, + -32 + ], + [ + 369, + 264, + 122, + 43, + -60, + -32 + ], + [ + 0, + 308, + 122, + 43, + -60, + -32 + ], + [ + 123, + 308, + 122, + 43, + -60, + -32 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/fanaticism.png b/public/overlays/fanaticism.png new file mode 100644 index 0000000..5feab77 Binary files /dev/null and b/public/overlays/fanaticism.png differ diff --git a/public/overlays/fanaticismback.json b/public/overlays/fanaticismback.json new file mode 100644 index 0000000..a4c73dc --- /dev/null +++ b/public/overlays/fanaticismback.json @@ -0,0 +1,268 @@ +{ + "name": "fanaticism", + "celFile": "Fanatacism_Back", + "width": 512, + "height": 351, + "directions": 1, + "frames": 30, + "framesPerDirection": 30, + "animRate": 6, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -60, + "top": -32, + "width": 122, + "height": 43 + }, + "groups": [ + [ + [ + 0, + 0, + 122, + 43, + -60, + -32 + ], + [ + 123, + 0, + 122, + 43, + -60, + -32 + ], + [ + 246, + 0, + 122, + 43, + -60, + -32 + ], + [ + 369, + 0, + 122, + 43, + -60, + -32 + ], + [ + 0, + 44, + 122, + 43, + -60, + -32 + ], + [ + 123, + 44, + 122, + 43, + -60, + -32 + ], + [ + 246, + 44, + 122, + 43, + -60, + -32 + ], + [ + 369, + 44, + 122, + 43, + -60, + -32 + ], + [ + 0, + 88, + 122, + 43, + -60, + -32 + ], + [ + 123, + 88, + 122, + 43, + -60, + -32 + ], + [ + 246, + 88, + 122, + 43, + -60, + -32 + ], + [ + 369, + 88, + 122, + 43, + -60, + -32 + ], + [ + 0, + 132, + 122, + 43, + -60, + -32 + ], + [ + 123, + 132, + 122, + 43, + -60, + -32 + ], + [ + 246, + 132, + 122, + 43, + -60, + -32 + ], + [ + 369, + 132, + 122, + 43, + -60, + -32 + ], + [ + 0, + 176, + 122, + 43, + -60, + -32 + ], + [ + 123, + 176, + 122, + 43, + -60, + -32 + ], + [ + 246, + 176, + 122, + 43, + -60, + -32 + ], + [ + 369, + 176, + 122, + 43, + -60, + -32 + ], + [ + 0, + 220, + 122, + 43, + -60, + -32 + ], + [ + 123, + 220, + 122, + 43, + -60, + -32 + ], + [ + 246, + 220, + 122, + 43, + -60, + -32 + ], + [ + 369, + 220, + 122, + 43, + -60, + -32 + ], + [ + 0, + 264, + 122, + 43, + -60, + -32 + ], + [ + 123, + 264, + 122, + 43, + -60, + -32 + ], + [ + 246, + 264, + 122, + 43, + -60, + -32 + ], + [ + 369, + 264, + 122, + 43, + -60, + -32 + ], + [ + 0, + 308, + 122, + 43, + -60, + -32 + ], + [ + 123, + 308, + 122, + 43, + -60, + -32 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/fanaticismback.png b/public/overlays/fanaticismback.png new file mode 100644 index 0000000..5feab77 Binary files /dev/null and b/public/overlays/fanaticismback.png differ diff --git a/public/overlays/fire_cast_1.png b/public/overlays/fire_cast_1.png index 972a2cf..a3a4a09 100644 Binary files a/public/overlays/fire_cast_1.png and b/public/overlays/fire_cast_1.png differ diff --git a/public/overlays/fire_cast_2.png b/public/overlays/fire_cast_2.png index 109d5a1..dce6ed5 100644 Binary files a/public/overlays/fire_cast_2.png and b/public/overlays/fire_cast_2.png differ diff --git a/public/overlays/holy_fire.json b/public/overlays/holy_fire.json new file mode 100644 index 0000000..112ad51 --- /dev/null +++ b/public/overlays/holy_fire.json @@ -0,0 +1,180 @@ +{ + "name": "holy_fire", + "celFile": "AuraHolyFireFront", + "width": 512, + "height": 143, + "directions": 1, + "frames": 19, + "framesPerDirection": 19, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -44, + "top": -10, + "width": 89, + "height": 35 + }, + "groups": [ + [ + [ + 0, + 0, + 89, + 35, + -44, + -10 + ], + [ + 90, + 0, + 89, + 35, + -44, + -10 + ], + [ + 180, + 0, + 89, + 35, + -44, + -10 + ], + [ + 270, + 0, + 89, + 35, + -44, + -10 + ], + [ + 360, + 0, + 89, + 35, + -44, + -10 + ], + [ + 0, + 36, + 89, + 35, + -44, + -10 + ], + [ + 90, + 36, + 89, + 35, + -44, + -10 + ], + [ + 180, + 36, + 89, + 35, + -44, + -10 + ], + [ + 270, + 36, + 89, + 35, + -44, + -10 + ], + [ + 360, + 36, + 89, + 35, + -44, + -10 + ], + [ + 0, + 72, + 89, + 35, + -44, + -10 + ], + [ + 90, + 72, + 89, + 35, + -44, + -10 + ], + [ + 180, + 72, + 89, + 35, + -44, + -10 + ], + [ + 270, + 72, + 89, + 35, + -44, + -10 + ], + [ + 360, + 72, + 89, + 35, + -44, + -10 + ], + [ + 0, + 108, + 89, + 35, + -44, + -10 + ], + [ + 90, + 108, + 89, + 35, + -44, + -10 + ], + [ + 180, + 108, + 89, + 35, + -44, + -10 + ], + [ + 270, + 108, + 89, + 35, + -44, + -10 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/holy_fire.png b/public/overlays/holy_fire.png new file mode 100644 index 0000000..2f8d579 Binary files /dev/null and b/public/overlays/holy_fire.png differ diff --git a/public/overlays/holy_freeze.json b/public/overlays/holy_freeze.json new file mode 100644 index 0000000..c4bc81c --- /dev/null +++ b/public/overlays/holy_freeze.json @@ -0,0 +1,148 @@ +{ + "name": "holy_freeze", + "celFile": "HolyFreeze", + "width": 512, + "height": 375, + "directions": 1, + "frames": 15, + "framesPerDirection": 15, + "animRate": 8, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -57, + "top": -50, + "width": 114, + "height": 93 + }, + "groups": [ + [ + [ + 0, + 0, + 114, + 93, + -57, + -50 + ], + [ + 115, + 0, + 114, + 93, + -57, + -50 + ], + [ + 230, + 0, + 114, + 93, + -57, + -50 + ], + [ + 345, + 0, + 114, + 93, + -57, + -50 + ], + [ + 0, + 94, + 114, + 93, + -57, + -50 + ], + [ + 115, + 94, + 114, + 93, + -57, + -50 + ], + [ + 230, + 94, + 114, + 93, + -57, + -50 + ], + [ + 345, + 94, + 114, + 93, + -57, + -50 + ], + [ + 0, + 188, + 114, + 93, + -57, + -50 + ], + [ + 115, + 188, + 114, + 93, + -57, + -50 + ], + [ + 230, + 188, + 114, + 93, + -57, + -50 + ], + [ + 345, + 188, + 114, + 93, + -57, + -50 + ], + [ + 0, + 282, + 114, + 93, + -57, + -50 + ], + [ + 115, + 282, + 114, + 93, + -57, + -50 + ], + [ + 230, + 282, + 114, + 93, + -57, + -50 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/holy_freeze.png b/public/overlays/holy_freeze.png new file mode 100644 index 0000000..9a6491a Binary files /dev/null and b/public/overlays/holy_freeze.png differ diff --git a/public/overlays/holy_shock.json b/public/overlays/holy_shock.json new file mode 100644 index 0000000..777c9f3 --- /dev/null +++ b/public/overlays/holy_shock.json @@ -0,0 +1,140 @@ +{ + "name": "holy_shock", + "celFile": "HolyShock_front", + "width": 512, + "height": 51, + "directions": 1, + "frames": 14, + "framesPerDirection": 14, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -37, + "top": -5, + "width": 72, + "height": 25 + }, + "groups": [ + [ + [ + 0, + 0, + 72, + 25, + -37, + -5 + ], + [ + 73, + 0, + 72, + 25, + -37, + -5 + ], + [ + 146, + 0, + 72, + 25, + -37, + -5 + ], + [ + 219, + 0, + 72, + 25, + -37, + -5 + ], + [ + 292, + 0, + 72, + 25, + -37, + -5 + ], + [ + 365, + 0, + 72, + 25, + -37, + -5 + ], + [ + 438, + 0, + 72, + 25, + -37, + -5 + ], + [ + 0, + 26, + 72, + 25, + -37, + -5 + ], + [ + 73, + 26, + 72, + 25, + -37, + -5 + ], + [ + 146, + 26, + 72, + 25, + -37, + -5 + ], + [ + 219, + 26, + 72, + 25, + -37, + -5 + ], + [ + 292, + 26, + 72, + 25, + -37, + -5 + ], + [ + 365, + 26, + 72, + 25, + -37, + -5 + ], + [ + 438, + 26, + 72, + 25, + -37, + -5 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/holy_shock.png b/public/overlays/holy_shock.png new file mode 100644 index 0000000..38dc411 Binary files /dev/null and b/public/overlays/holy_shock.png differ diff --git a/public/overlays/holyfreeze.json b/public/overlays/holyfreeze.json new file mode 100644 index 0000000..c4bc81c --- /dev/null +++ b/public/overlays/holyfreeze.json @@ -0,0 +1,148 @@ +{ + "name": "holy_freeze", + "celFile": "HolyFreeze", + "width": 512, + "height": 375, + "directions": 1, + "frames": 15, + "framesPerDirection": 15, + "animRate": 8, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -57, + "top": -50, + "width": 114, + "height": 93 + }, + "groups": [ + [ + [ + 0, + 0, + 114, + 93, + -57, + -50 + ], + [ + 115, + 0, + 114, + 93, + -57, + -50 + ], + [ + 230, + 0, + 114, + 93, + -57, + -50 + ], + [ + 345, + 0, + 114, + 93, + -57, + -50 + ], + [ + 0, + 94, + 114, + 93, + -57, + -50 + ], + [ + 115, + 94, + 114, + 93, + -57, + -50 + ], + [ + 230, + 94, + 114, + 93, + -57, + -50 + ], + [ + 345, + 94, + 114, + 93, + -57, + -50 + ], + [ + 0, + 188, + 114, + 93, + -57, + -50 + ], + [ + 115, + 188, + 114, + 93, + -57, + -50 + ], + [ + 230, + 188, + 114, + 93, + -57, + -50 + ], + [ + 345, + 188, + 114, + 93, + -57, + -50 + ], + [ + 0, + 282, + 114, + 93, + -57, + -50 + ], + [ + 115, + 282, + 114, + 93, + -57, + -50 + ], + [ + 230, + 282, + 114, + 93, + -57, + -50 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/holyfreeze.png b/public/overlays/holyfreeze.png new file mode 100644 index 0000000..9a6491a Binary files /dev/null and b/public/overlays/holyfreeze.png differ diff --git a/public/overlays/holyshock.json b/public/overlays/holyshock.json new file mode 100644 index 0000000..777c9f3 --- /dev/null +++ b/public/overlays/holyshock.json @@ -0,0 +1,140 @@ +{ + "name": "holy_shock", + "celFile": "HolyShock_front", + "width": 512, + "height": 51, + "directions": 1, + "frames": 14, + "framesPerDirection": 14, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -37, + "top": -5, + "width": 72, + "height": 25 + }, + "groups": [ + [ + [ + 0, + 0, + 72, + 25, + -37, + -5 + ], + [ + 73, + 0, + 72, + 25, + -37, + -5 + ], + [ + 146, + 0, + 72, + 25, + -37, + -5 + ], + [ + 219, + 0, + 72, + 25, + -37, + -5 + ], + [ + 292, + 0, + 72, + 25, + -37, + -5 + ], + [ + 365, + 0, + 72, + 25, + -37, + -5 + ], + [ + 438, + 0, + 72, + 25, + -37, + -5 + ], + [ + 0, + 26, + 72, + 25, + -37, + -5 + ], + [ + 73, + 26, + 72, + 25, + -37, + -5 + ], + [ + 146, + 26, + 72, + 25, + -37, + -5 + ], + [ + 219, + 26, + 72, + 25, + -37, + -5 + ], + [ + 292, + 26, + 72, + 25, + -37, + -5 + ], + [ + 365, + 26, + 72, + 25, + -37, + -5 + ], + [ + 438, + 26, + 72, + 25, + -37, + -5 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/holyshock.png b/public/overlays/holyshock.png new file mode 100644 index 0000000..38dc411 Binary files /dev/null and b/public/overlays/holyshock.png differ diff --git a/public/overlays/holyshock_front.json b/public/overlays/holyshock_front.json new file mode 100644 index 0000000..777c9f3 --- /dev/null +++ b/public/overlays/holyshock_front.json @@ -0,0 +1,140 @@ +{ + "name": "holy_shock", + "celFile": "HolyShock_front", + "width": 512, + "height": 51, + "directions": 1, + "frames": 14, + "framesPerDirection": 14, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -37, + "top": -5, + "width": 72, + "height": 25 + }, + "groups": [ + [ + [ + 0, + 0, + 72, + 25, + -37, + -5 + ], + [ + 73, + 0, + 72, + 25, + -37, + -5 + ], + [ + 146, + 0, + 72, + 25, + -37, + -5 + ], + [ + 219, + 0, + 72, + 25, + -37, + -5 + ], + [ + 292, + 0, + 72, + 25, + -37, + -5 + ], + [ + 365, + 0, + 72, + 25, + -37, + -5 + ], + [ + 438, + 0, + 72, + 25, + -37, + -5 + ], + [ + 0, + 26, + 72, + 25, + -37, + -5 + ], + [ + 73, + 26, + 72, + 25, + -37, + -5 + ], + [ + 146, + 26, + 72, + 25, + -37, + -5 + ], + [ + 219, + 26, + 72, + 25, + -37, + -5 + ], + [ + 292, + 26, + 72, + 25, + -37, + -5 + ], + [ + 365, + 26, + 72, + 25, + -37, + -5 + ], + [ + 438, + 26, + 72, + 25, + -37, + -5 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/holyshock_front.png b/public/overlays/holyshock_front.png new file mode 100644 index 0000000..38dc411 Binary files /dev/null and b/public/overlays/holyshock_front.png differ diff --git a/public/overlays/holyshockfront.json b/public/overlays/holyshockfront.json new file mode 100644 index 0000000..777c9f3 --- /dev/null +++ b/public/overlays/holyshockfront.json @@ -0,0 +1,140 @@ +{ + "name": "holy_shock", + "celFile": "HolyShock_front", + "width": 512, + "height": 51, + "directions": 1, + "frames": 14, + "framesPerDirection": 14, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -37, + "top": -5, + "width": 72, + "height": 25 + }, + "groups": [ + [ + [ + 0, + 0, + 72, + 25, + -37, + -5 + ], + [ + 73, + 0, + 72, + 25, + -37, + -5 + ], + [ + 146, + 0, + 72, + 25, + -37, + -5 + ], + [ + 219, + 0, + 72, + 25, + -37, + -5 + ], + [ + 292, + 0, + 72, + 25, + -37, + -5 + ], + [ + 365, + 0, + 72, + 25, + -37, + -5 + ], + [ + 438, + 0, + 72, + 25, + -37, + -5 + ], + [ + 0, + 26, + 72, + 25, + -37, + -5 + ], + [ + 73, + 26, + 72, + 25, + -37, + -5 + ], + [ + 146, + 26, + 72, + 25, + -37, + -5 + ], + [ + 219, + 26, + 72, + 25, + -37, + -5 + ], + [ + 292, + 26, + 72, + 25, + -37, + -5 + ], + [ + 365, + 26, + 72, + 25, + -37, + -5 + ], + [ + 438, + 26, + 72, + 25, + -37, + -5 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/holyshockfront.png b/public/overlays/holyshockfront.png new file mode 100644 index 0000000..38dc411 Binary files /dev/null and b/public/overlays/holyshockfront.png differ diff --git a/public/overlays/holywind.json b/public/overlays/holywind.json new file mode 100644 index 0000000..c4bc81c --- /dev/null +++ b/public/overlays/holywind.json @@ -0,0 +1,148 @@ +{ + "name": "holy_freeze", + "celFile": "HolyFreeze", + "width": 512, + "height": 375, + "directions": 1, + "frames": 15, + "framesPerDirection": 15, + "animRate": 8, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -57, + "top": -50, + "width": 114, + "height": 93 + }, + "groups": [ + [ + [ + 0, + 0, + 114, + 93, + -57, + -50 + ], + [ + 115, + 0, + 114, + 93, + -57, + -50 + ], + [ + 230, + 0, + 114, + 93, + -57, + -50 + ], + [ + 345, + 0, + 114, + 93, + -57, + -50 + ], + [ + 0, + 94, + 114, + 93, + -57, + -50 + ], + [ + 115, + 94, + 114, + 93, + -57, + -50 + ], + [ + 230, + 94, + 114, + 93, + -57, + -50 + ], + [ + 345, + 94, + 114, + 93, + -57, + -50 + ], + [ + 0, + 188, + 114, + 93, + -57, + -50 + ], + [ + 115, + 188, + 114, + 93, + -57, + -50 + ], + [ + 230, + 188, + 114, + 93, + -57, + -50 + ], + [ + 345, + 188, + 114, + 93, + -57, + -50 + ], + [ + 0, + 282, + 114, + 93, + -57, + -50 + ], + [ + 115, + 282, + 114, + 93, + -57, + -50 + ], + [ + 230, + 282, + 114, + 93, + -57, + -50 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/holywind.png b/public/overlays/holywind.png new file mode 100644 index 0000000..9a6491a Binary files /dev/null and b/public/overlays/holywind.png differ diff --git a/public/overlays/ice_cast_1.png b/public/overlays/ice_cast_1.png index 286387a..dfc2382 100644 Binary files a/public/overlays/ice_cast_1.png and b/public/overlays/ice_cast_1.png differ diff --git a/public/overlays/ice_cast_2.png b/public/overlays/ice_cast_2.png index fa61d74..e4dc4a7 100644 Binary files a/public/overlays/ice_cast_2.png and b/public/overlays/ice_cast_2.png differ diff --git a/public/overlays/ice_cast_3.png b/public/overlays/ice_cast_3.png index ff47877..b04adaa 100644 Binary files a/public/overlays/ice_cast_3.png and b/public/overlays/ice_cast_3.png differ diff --git a/public/overlays/light_cast_1.png b/public/overlays/light_cast_1.png index 604ec09..79b060c 100644 Binary files a/public/overlays/light_cast_1.png and b/public/overlays/light_cast_1.png differ diff --git a/public/overlays/light_cast_2.png b/public/overlays/light_cast_2.png index fc5af96..fb90bf4 100644 Binary files a/public/overlays/light_cast_2.png and b/public/overlays/light_cast_2.png differ diff --git a/public/overlays/meditation.json b/public/overlays/meditation.json new file mode 100644 index 0000000..e39e608 --- /dev/null +++ b/public/overlays/meditation.json @@ -0,0 +1,188 @@ +{ + "name": "meditation", + "celFile": "Meditation", + "width": 512, + "height": 379, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -49, + "top": -81, + "width": 92, + "height": 94 + }, + "groups": [ + [ + [ + 0, + 0, + 92, + 94, + -49, + -81 + ], + [ + 93, + 0, + 92, + 94, + -49, + -81 + ], + [ + 186, + 0, + 92, + 94, + -49, + -81 + ], + [ + 279, + 0, + 92, + 94, + -49, + -81 + ], + [ + 372, + 0, + 92, + 94, + -49, + -81 + ], + [ + 0, + 95, + 92, + 94, + -49, + -81 + ], + [ + 93, + 95, + 92, + 94, + -49, + -81 + ], + [ + 186, + 95, + 92, + 94, + -49, + -81 + ], + [ + 279, + 95, + 92, + 94, + -49, + -81 + ], + [ + 372, + 95, + 92, + 94, + -49, + -81 + ], + [ + 0, + 190, + 92, + 94, + -49, + -81 + ], + [ + 93, + 190, + 92, + 94, + -49, + -81 + ], + [ + 186, + 190, + 92, + 94, + -49, + -81 + ], + [ + 279, + 190, + 92, + 94, + -49, + -81 + ], + [ + 372, + 190, + 92, + 94, + -49, + -81 + ], + [ + 0, + 285, + 92, + 94, + -49, + -81 + ], + [ + 93, + 285, + 92, + 94, + -49, + -81 + ], + [ + 186, + 285, + 92, + 94, + -49, + -81 + ], + [ + 279, + 285, + 92, + 94, + -49, + -81 + ], + [ + 372, + 285, + 92, + 94, + -49, + -81 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/meditation.png b/public/overlays/meditation.png new file mode 100644 index 0000000..8b860d8 Binary files /dev/null and b/public/overlays/meditation.png differ diff --git a/public/overlays/meditationfront.json b/public/overlays/meditationfront.json new file mode 100644 index 0000000..e39e608 --- /dev/null +++ b/public/overlays/meditationfront.json @@ -0,0 +1,188 @@ +{ + "name": "meditation", + "celFile": "Meditation", + "width": 512, + "height": 379, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -49, + "top": -81, + "width": 92, + "height": 94 + }, + "groups": [ + [ + [ + 0, + 0, + 92, + 94, + -49, + -81 + ], + [ + 93, + 0, + 92, + 94, + -49, + -81 + ], + [ + 186, + 0, + 92, + 94, + -49, + -81 + ], + [ + 279, + 0, + 92, + 94, + -49, + -81 + ], + [ + 372, + 0, + 92, + 94, + -49, + -81 + ], + [ + 0, + 95, + 92, + 94, + -49, + -81 + ], + [ + 93, + 95, + 92, + 94, + -49, + -81 + ], + [ + 186, + 95, + 92, + 94, + -49, + -81 + ], + [ + 279, + 95, + 92, + 94, + -49, + -81 + ], + [ + 372, + 95, + 92, + 94, + -49, + -81 + ], + [ + 0, + 190, + 92, + 94, + -49, + -81 + ], + [ + 93, + 190, + 92, + 94, + -49, + -81 + ], + [ + 186, + 190, + 92, + 94, + -49, + -81 + ], + [ + 279, + 190, + 92, + 94, + -49, + -81 + ], + [ + 372, + 190, + 92, + 94, + -49, + -81 + ], + [ + 0, + 285, + 92, + 94, + -49, + -81 + ], + [ + 93, + 285, + 92, + 94, + -49, + -81 + ], + [ + 186, + 285, + 92, + 94, + -49, + -81 + ], + [ + 279, + 285, + 92, + 94, + -49, + -81 + ], + [ + 372, + 285, + 92, + 94, + -49, + -81 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/meditationfront.png b/public/overlays/meditationfront.png new file mode 100644 index 0000000..8b860d8 Binary files /dev/null and b/public/overlays/meditationfront.png differ diff --git a/public/overlays/might.json b/public/overlays/might.json new file mode 100644 index 0000000..ae9be5c --- /dev/null +++ b/public/overlays/might.json @@ -0,0 +1,148 @@ +{ + "name": "might", + "celFile": "AuraMightFront", + "width": 512, + "height": 80, + "directions": 1, + "frames": 15, + "framesPerDirection": 15, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -36, + "top": -7, + "width": 72, + "height": 26 + }, + "groups": [ + [ + [ + 0, + 0, + 72, + 26, + -36, + -7 + ], + [ + 73, + 0, + 72, + 26, + -36, + -7 + ], + [ + 146, + 0, + 72, + 26, + -36, + -7 + ], + [ + 219, + 0, + 72, + 26, + -36, + -7 + ], + [ + 292, + 0, + 72, + 26, + -36, + -7 + ], + [ + 365, + 0, + 72, + 26, + -36, + -7 + ], + [ + 438, + 0, + 72, + 26, + -36, + -7 + ], + [ + 0, + 27, + 72, + 26, + -36, + -7 + ], + [ + 73, + 27, + 72, + 26, + -36, + -7 + ], + [ + 146, + 27, + 72, + 26, + -36, + -7 + ], + [ + 219, + 27, + 72, + 26, + -36, + -7 + ], + [ + 292, + 27, + 72, + 26, + -36, + -7 + ], + [ + 365, + 27, + 72, + 26, + -36, + -7 + ], + [ + 438, + 27, + 72, + 26, + -36, + -7 + ], + [ + 0, + 54, + 72, + 26, + -36, + -7 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/might.png b/public/overlays/might.png new file mode 100644 index 0000000..2b94bed Binary files /dev/null and b/public/overlays/might.png differ diff --git a/public/overlays/prayer.json b/public/overlays/prayer.json new file mode 100644 index 0000000..d4a221d --- /dev/null +++ b/public/overlays/prayer.json @@ -0,0 +1,156 @@ +{ + "name": "prayer", + "celFile": "AuraPrayerFront", + "width": 512, + "height": 149, + "directions": 1, + "frames": 16, + "framesPerDirection": 16, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -42, + "top": -23, + "width": 83, + "height": 49 + }, + "groups": [ + [ + [ + 0, + 0, + 83, + 49, + -42, + -23 + ], + [ + 84, + 0, + 83, + 49, + -42, + -23 + ], + [ + 168, + 0, + 83, + 49, + -42, + -23 + ], + [ + 252, + 0, + 83, + 49, + -42, + -23 + ], + [ + 336, + 0, + 83, + 49, + -42, + -23 + ], + [ + 420, + 0, + 83, + 49, + -42, + -23 + ], + [ + 0, + 50, + 83, + 49, + -42, + -23 + ], + [ + 84, + 50, + 83, + 49, + -42, + -23 + ], + [ + 168, + 50, + 83, + 49, + -42, + -23 + ], + [ + 252, + 50, + 83, + 49, + -42, + -23 + ], + [ + 336, + 50, + 83, + 49, + -42, + -23 + ], + [ + 420, + 50, + 83, + 49, + -42, + -23 + ], + [ + 0, + 100, + 83, + 49, + -42, + -23 + ], + [ + 84, + 100, + 83, + 49, + -42, + -23 + ], + [ + 168, + 100, + 83, + 49, + -42, + -23 + ], + [ + 252, + 100, + 83, + 49, + -42, + -23 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/prayer.png b/public/overlays/prayer.png new file mode 100644 index 0000000..9f644fa Binary files /dev/null and b/public/overlays/prayer.png differ diff --git a/public/overlays/redemption.json b/public/overlays/redemption.json new file mode 100644 index 0000000..03cfdb1 --- /dev/null +++ b/public/overlays/redemption.json @@ -0,0 +1,124 @@ +{ + "name": "redemption", + "celFile": "Redemption", + "width": 512, + "height": 182, + "directions": 1, + "frames": 12, + "framesPerDirection": 12, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -53, + "top": -27, + "width": 104, + "height": 60 + }, + "groups": [ + [ + [ + 0, + 0, + 104, + 60, + -53, + -27 + ], + [ + 105, + 0, + 104, + 60, + -53, + -27 + ], + [ + 210, + 0, + 104, + 60, + -53, + -27 + ], + [ + 315, + 0, + 104, + 60, + -53, + -27 + ], + [ + 0, + 61, + 104, + 60, + -53, + -27 + ], + [ + 105, + 61, + 104, + 60, + -53, + -27 + ], + [ + 210, + 61, + 104, + 60, + -53, + -27 + ], + [ + 315, + 61, + 104, + 60, + -53, + -27 + ], + [ + 0, + 122, + 104, + 60, + -53, + -27 + ], + [ + 105, + 122, + 104, + 60, + -53, + -27 + ], + [ + 210, + 122, + 104, + 60, + -53, + -27 + ], + [ + 315, + 122, + 104, + 60, + -53, + -27 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/redemption.png b/public/overlays/redemption.png new file mode 100644 index 0000000..28fa5fd Binary files /dev/null and b/public/overlays/redemption.png differ diff --git a/public/overlays/redemptionback.json b/public/overlays/redemptionback.json new file mode 100644 index 0000000..03cfdb1 --- /dev/null +++ b/public/overlays/redemptionback.json @@ -0,0 +1,124 @@ +{ + "name": "redemption", + "celFile": "Redemption", + "width": 512, + "height": 182, + "directions": 1, + "frames": 12, + "framesPerDirection": 12, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -53, + "top": -27, + "width": 104, + "height": 60 + }, + "groups": [ + [ + [ + 0, + 0, + 104, + 60, + -53, + -27 + ], + [ + 105, + 0, + 104, + 60, + -53, + -27 + ], + [ + 210, + 0, + 104, + 60, + -53, + -27 + ], + [ + 315, + 0, + 104, + 60, + -53, + -27 + ], + [ + 0, + 61, + 104, + 60, + -53, + -27 + ], + [ + 105, + 61, + 104, + 60, + -53, + -27 + ], + [ + 210, + 61, + 104, + 60, + -53, + -27 + ], + [ + 315, + 61, + 104, + 60, + -53, + -27 + ], + [ + 0, + 122, + 104, + 60, + -53, + -27 + ], + [ + 105, + 122, + 104, + 60, + -53, + -27 + ], + [ + 210, + 122, + 104, + 60, + -53, + -27 + ], + [ + 315, + 122, + 104, + 60, + -53, + -27 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/redemptionback.png b/public/overlays/redemptionback.png new file mode 100644 index 0000000..28fa5fd Binary files /dev/null and b/public/overlays/redemptionback.png differ diff --git a/public/overlays/resist_cold.json b/public/overlays/resist_cold.json new file mode 100644 index 0000000..12e4a28 --- /dev/null +++ b/public/overlays/resist_cold.json @@ -0,0 +1,188 @@ +{ + "name": "resist_cold", + "celFile": "AuraResistColdBack", + "width": 512, + "height": 187, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 6, + "lightColor": [ + 210, + 210, + 255 + ], + "box": { + "left": -41, + "top": -24, + "width": 80, + "height": 46 + }, + "groups": [ + [ + [ + 0, + 0, + 80, + 46, + -41, + -24 + ], + [ + 81, + 0, + 80, + 46, + -41, + -24 + ], + [ + 162, + 0, + 80, + 46, + -41, + -24 + ], + [ + 243, + 0, + 80, + 46, + -41, + -24 + ], + [ + 324, + 0, + 80, + 46, + -41, + -24 + ], + [ + 405, + 0, + 80, + 46, + -41, + -24 + ], + [ + 0, + 47, + 80, + 46, + -41, + -24 + ], + [ + 81, + 47, + 80, + 46, + -41, + -24 + ], + [ + 162, + 47, + 80, + 46, + -41, + -24 + ], + [ + 243, + 47, + 80, + 46, + -41, + -24 + ], + [ + 324, + 47, + 80, + 46, + -41, + -24 + ], + [ + 405, + 47, + 80, + 46, + -41, + -24 + ], + [ + 0, + 94, + 80, + 46, + -41, + -24 + ], + [ + 81, + 94, + 80, + 46, + -41, + -24 + ], + [ + 162, + 94, + 80, + 46, + -41, + -24 + ], + [ + 243, + 94, + 80, + 46, + -41, + -24 + ], + [ + 324, + 94, + 80, + 46, + -41, + -24 + ], + [ + 405, + 94, + 80, + 46, + -41, + -24 + ], + [ + 0, + 141, + 80, + 46, + -41, + -24 + ], + [ + 81, + 141, + 80, + 46, + -41, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/resist_cold.png b/public/overlays/resist_cold.png new file mode 100644 index 0000000..037147e Binary files /dev/null and b/public/overlays/resist_cold.png differ diff --git a/public/overlays/resist_fire.json b/public/overlays/resist_fire.json new file mode 100644 index 0000000..3902189 --- /dev/null +++ b/public/overlays/resist_fire.json @@ -0,0 +1,188 @@ +{ + "name": "resist_fire", + "celFile": "AuraResistFireFront", + "width": 512, + "height": 183, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 6, + "lightColor": [ + 255, + 193, + 103 + ], + "box": { + "left": -40, + "top": -24, + "width": 77, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 77, + 45, + -40, + -24 + ], + [ + 78, + 0, + 77, + 45, + -40, + -24 + ], + [ + 156, + 0, + 77, + 45, + -40, + -24 + ], + [ + 234, + 0, + 77, + 45, + -40, + -24 + ], + [ + 312, + 0, + 77, + 45, + -40, + -24 + ], + [ + 390, + 0, + 77, + 45, + -40, + -24 + ], + [ + 0, + 46, + 77, + 45, + -40, + -24 + ], + [ + 78, + 46, + 77, + 45, + -40, + -24 + ], + [ + 156, + 46, + 77, + 45, + -40, + -24 + ], + [ + 234, + 46, + 77, + 45, + -40, + -24 + ], + [ + 312, + 46, + 77, + 45, + -40, + -24 + ], + [ + 390, + 46, + 77, + 45, + -40, + -24 + ], + [ + 0, + 92, + 77, + 45, + -40, + -24 + ], + [ + 78, + 92, + 77, + 45, + -40, + -24 + ], + [ + 156, + 92, + 77, + 45, + -40, + -24 + ], + [ + 234, + 92, + 77, + 45, + -40, + -24 + ], + [ + 312, + 92, + 77, + 45, + -40, + -24 + ], + [ + 390, + 92, + 77, + 45, + -40, + -24 + ], + [ + 0, + 138, + 77, + 45, + -40, + -24 + ], + [ + 78, + 138, + 77, + 45, + -40, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/resist_fire.png b/public/overlays/resist_fire.png new file mode 100644 index 0000000..fa58219 Binary files /dev/null and b/public/overlays/resist_fire.png differ diff --git a/public/overlays/resist_lightning.json b/public/overlays/resist_lightning.json new file mode 100644 index 0000000..e0446ae --- /dev/null +++ b/public/overlays/resist_lightning.json @@ -0,0 +1,188 @@ +{ + "name": "resist_lightning", + "celFile": "AuraResistLightningBack", + "width": 512, + "height": 183, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 6, + "lightColor": [ + 255, + 255, + 200 + ], + "box": { + "left": -41, + "top": -24, + "width": 79, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 79, + 45, + -41, + -24 + ], + [ + 80, + 0, + 79, + 45, + -41, + -24 + ], + [ + 160, + 0, + 79, + 45, + -41, + -24 + ], + [ + 240, + 0, + 79, + 45, + -41, + -24 + ], + [ + 320, + 0, + 79, + 45, + -41, + -24 + ], + [ + 400, + 0, + 79, + 45, + -41, + -24 + ], + [ + 0, + 46, + 79, + 45, + -41, + -24 + ], + [ + 80, + 46, + 79, + 45, + -41, + -24 + ], + [ + 160, + 46, + 79, + 45, + -41, + -24 + ], + [ + 240, + 46, + 79, + 45, + -41, + -24 + ], + [ + 320, + 46, + 79, + 45, + -41, + -24 + ], + [ + 400, + 46, + 79, + 45, + -41, + -24 + ], + [ + 0, + 92, + 79, + 45, + -41, + -24 + ], + [ + 80, + 92, + 79, + 45, + -41, + -24 + ], + [ + 160, + 92, + 79, + 45, + -41, + -24 + ], + [ + 240, + 92, + 79, + 45, + -41, + -24 + ], + [ + 320, + 92, + 79, + 45, + -41, + -24 + ], + [ + 400, + 92, + 79, + 45, + -41, + -24 + ], + [ + 0, + 138, + 79, + 45, + -41, + -24 + ], + [ + 80, + 138, + 79, + 45, + -41, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/resist_lightning.png b/public/overlays/resist_lightning.png new file mode 100644 index 0000000..55c4971 Binary files /dev/null and b/public/overlays/resist_lightning.png differ diff --git a/public/overlays/salvation.json b/public/overlays/salvation.json new file mode 100644 index 0000000..d807dc0 --- /dev/null +++ b/public/overlays/salvation.json @@ -0,0 +1,188 @@ +{ + "name": "salvation", + "celFile": "AuraResistAllFront", + "width": 512, + "height": 187, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 6, + "lightColor": [ + 211, + 148, + 255 + ], + "box": { + "left": -40, + "top": -24, + "width": 78, + "height": 46 + }, + "groups": [ + [ + [ + 0, + 0, + 78, + 46, + -40, + -24 + ], + [ + 79, + 0, + 78, + 46, + -40, + -24 + ], + [ + 158, + 0, + 78, + 46, + -40, + -24 + ], + [ + 237, + 0, + 78, + 46, + -40, + -24 + ], + [ + 316, + 0, + 78, + 46, + -40, + -24 + ], + [ + 395, + 0, + 78, + 46, + -40, + -24 + ], + [ + 0, + 47, + 78, + 46, + -40, + -24 + ], + [ + 79, + 47, + 78, + 46, + -40, + -24 + ], + [ + 158, + 47, + 78, + 46, + -40, + -24 + ], + [ + 237, + 47, + 78, + 46, + -40, + -24 + ], + [ + 316, + 47, + 78, + 46, + -40, + -24 + ], + [ + 395, + 47, + 78, + 46, + -40, + -24 + ], + [ + 0, + 94, + 78, + 46, + -40, + -24 + ], + [ + 79, + 94, + 78, + 46, + -40, + -24 + ], + [ + 158, + 94, + 78, + 46, + -40, + -24 + ], + [ + 237, + 94, + 78, + 46, + -40, + -24 + ], + [ + 316, + 94, + 78, + 46, + -40, + -24 + ], + [ + 395, + 94, + 78, + 46, + -40, + -24 + ], + [ + 0, + 141, + 78, + 46, + -40, + -24 + ], + [ + 79, + 141, + 78, + 46, + -40, + -24 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/salvation.png b/public/overlays/salvation.png new file mode 100644 index 0000000..a7360fc Binary files /dev/null and b/public/overlays/salvation.png differ diff --git a/public/overlays/sanctuary.json b/public/overlays/sanctuary.json new file mode 100644 index 0000000..ddd9d7d --- /dev/null +++ b/public/overlays/sanctuary.json @@ -0,0 +1,124 @@ +{ + "name": "sanctuary", + "celFile": "SanctuaryAura_Front", + "width": 512, + "height": 92, + "directions": 1, + "frames": 12, + "framesPerDirection": 12, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -59, + "top": -1, + "width": 119, + "height": 30 + }, + "groups": [ + [ + [ + 0, + 0, + 119, + 30, + -59, + -1 + ], + [ + 120, + 0, + 119, + 30, + -59, + -1 + ], + [ + 240, + 0, + 119, + 30, + -59, + -1 + ], + [ + 360, + 0, + 119, + 30, + -59, + -1 + ], + [ + 0, + 31, + 119, + 30, + -59, + -1 + ], + [ + 120, + 31, + 119, + 30, + -59, + -1 + ], + [ + 240, + 31, + 119, + 30, + -59, + -1 + ], + [ + 360, + 31, + 119, + 30, + -59, + -1 + ], + [ + 0, + 62, + 119, + 30, + -59, + -1 + ], + [ + 120, + 62, + 119, + 30, + -59, + -1 + ], + [ + 240, + 62, + 119, + 30, + -59, + -1 + ], + [ + 360, + 62, + 119, + 30, + -59, + -1 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/sanctuary.png b/public/overlays/sanctuary.png new file mode 100644 index 0000000..79d5c40 Binary files /dev/null and b/public/overlays/sanctuary.png differ diff --git a/public/overlays/sanctuary_front.json b/public/overlays/sanctuary_front.json new file mode 100644 index 0000000..ddd9d7d --- /dev/null +++ b/public/overlays/sanctuary_front.json @@ -0,0 +1,124 @@ +{ + "name": "sanctuary", + "celFile": "SanctuaryAura_Front", + "width": 512, + "height": 92, + "directions": 1, + "frames": 12, + "framesPerDirection": 12, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -59, + "top": -1, + "width": 119, + "height": 30 + }, + "groups": [ + [ + [ + 0, + 0, + 119, + 30, + -59, + -1 + ], + [ + 120, + 0, + 119, + 30, + -59, + -1 + ], + [ + 240, + 0, + 119, + 30, + -59, + -1 + ], + [ + 360, + 0, + 119, + 30, + -59, + -1 + ], + [ + 0, + 31, + 119, + 30, + -59, + -1 + ], + [ + 120, + 31, + 119, + 30, + -59, + -1 + ], + [ + 240, + 31, + 119, + 30, + -59, + -1 + ], + [ + 360, + 31, + 119, + 30, + -59, + -1 + ], + [ + 0, + 62, + 119, + 30, + -59, + -1 + ], + [ + 120, + 62, + 119, + 30, + -59, + -1 + ], + [ + 240, + 62, + 119, + 30, + -59, + -1 + ], + [ + 360, + 62, + 119, + 30, + -59, + -1 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/sanctuary_front.png b/public/overlays/sanctuary_front.png new file mode 100644 index 0000000..79d5c40 Binary files /dev/null and b/public/overlays/sanctuary_front.png differ diff --git a/public/overlays/sanctuaryfront.json b/public/overlays/sanctuaryfront.json new file mode 100644 index 0000000..ddd9d7d --- /dev/null +++ b/public/overlays/sanctuaryfront.json @@ -0,0 +1,124 @@ +{ + "name": "sanctuary", + "celFile": "SanctuaryAura_Front", + "width": 512, + "height": 92, + "directions": 1, + "frames": 12, + "framesPerDirection": 12, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -59, + "top": -1, + "width": 119, + "height": 30 + }, + "groups": [ + [ + [ + 0, + 0, + 119, + 30, + -59, + -1 + ], + [ + 120, + 0, + 119, + 30, + -59, + -1 + ], + [ + 240, + 0, + 119, + 30, + -59, + -1 + ], + [ + 360, + 0, + 119, + 30, + -59, + -1 + ], + [ + 0, + 31, + 119, + 30, + -59, + -1 + ], + [ + 120, + 31, + 119, + 30, + -59, + -1 + ], + [ + 240, + 31, + 119, + 30, + -59, + -1 + ], + [ + 360, + 31, + 119, + 30, + -59, + -1 + ], + [ + 0, + 62, + 119, + 30, + -59, + -1 + ], + [ + 120, + 62, + 119, + 30, + -59, + -1 + ], + [ + 240, + 62, + 119, + 30, + -59, + -1 + ], + [ + 360, + 62, + 119, + 30, + -59, + -1 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/sanctuaryfront.png b/public/overlays/sanctuaryfront.png new file mode 100644 index 0000000..79d5c40 Binary files /dev/null and b/public/overlays/sanctuaryfront.png differ diff --git a/public/overlays/stamina.json b/public/overlays/stamina.json new file mode 100644 index 0000000..1438f10 --- /dev/null +++ b/public/overlays/stamina.json @@ -0,0 +1,156 @@ +{ + "name": "vigor", + "celFile": "Stamina_front", + "width": 512, + "height": 187, + "directions": 1, + "frames": 16, + "framesPerDirection": 16, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -44, + "top": -15, + "width": 94, + "height": 46 + }, + "groups": [ + [ + [ + 0, + 0, + 94, + 46, + -44, + -15 + ], + [ + 95, + 0, + 94, + 46, + -44, + -15 + ], + [ + 190, + 0, + 94, + 46, + -44, + -15 + ], + [ + 285, + 0, + 94, + 46, + -44, + -15 + ], + [ + 380, + 0, + 94, + 46, + -44, + -15 + ], + [ + 0, + 47, + 94, + 46, + -44, + -15 + ], + [ + 95, + 47, + 94, + 46, + -44, + -15 + ], + [ + 190, + 47, + 94, + 46, + -44, + -15 + ], + [ + 285, + 47, + 94, + 46, + -44, + -15 + ], + [ + 380, + 47, + 94, + 46, + -44, + -15 + ], + [ + 0, + 94, + 94, + 46, + -44, + -15 + ], + [ + 95, + 94, + 94, + 46, + -44, + -15 + ], + [ + 190, + 94, + 94, + 46, + -44, + -15 + ], + [ + 285, + 94, + 94, + 46, + -44, + -15 + ], + [ + 380, + 94, + 94, + 46, + -44, + -15 + ], + [ + 0, + 141, + 94, + 46, + -44, + -15 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/stamina.png b/public/overlays/stamina.png new file mode 100644 index 0000000..1e4e249 Binary files /dev/null and b/public/overlays/stamina.png differ diff --git a/public/overlays/stamina_front.json b/public/overlays/stamina_front.json new file mode 100644 index 0000000..1438f10 --- /dev/null +++ b/public/overlays/stamina_front.json @@ -0,0 +1,156 @@ +{ + "name": "vigor", + "celFile": "Stamina_front", + "width": 512, + "height": 187, + "directions": 1, + "frames": 16, + "framesPerDirection": 16, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -44, + "top": -15, + "width": 94, + "height": 46 + }, + "groups": [ + [ + [ + 0, + 0, + 94, + 46, + -44, + -15 + ], + [ + 95, + 0, + 94, + 46, + -44, + -15 + ], + [ + 190, + 0, + 94, + 46, + -44, + -15 + ], + [ + 285, + 0, + 94, + 46, + -44, + -15 + ], + [ + 380, + 0, + 94, + 46, + -44, + -15 + ], + [ + 0, + 47, + 94, + 46, + -44, + -15 + ], + [ + 95, + 47, + 94, + 46, + -44, + -15 + ], + [ + 190, + 47, + 94, + 46, + -44, + -15 + ], + [ + 285, + 47, + 94, + 46, + -44, + -15 + ], + [ + 380, + 47, + 94, + 46, + -44, + -15 + ], + [ + 0, + 94, + 94, + 46, + -44, + -15 + ], + [ + 95, + 94, + 94, + 46, + -44, + -15 + ], + [ + 190, + 94, + 94, + 46, + -44, + -15 + ], + [ + 285, + 94, + 94, + 46, + -44, + -15 + ], + [ + 380, + 94, + 94, + 46, + -44, + -15 + ], + [ + 0, + 141, + 94, + 46, + -44, + -15 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/stamina_front.png b/public/overlays/stamina_front.png new file mode 100644 index 0000000..1e4e249 Binary files /dev/null and b/public/overlays/stamina_front.png differ diff --git a/public/overlays/staminafront.json b/public/overlays/staminafront.json new file mode 100644 index 0000000..1438f10 --- /dev/null +++ b/public/overlays/staminafront.json @@ -0,0 +1,156 @@ +{ + "name": "vigor", + "celFile": "Stamina_front", + "width": 512, + "height": 187, + "directions": 1, + "frames": 16, + "framesPerDirection": 16, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -44, + "top": -15, + "width": 94, + "height": 46 + }, + "groups": [ + [ + [ + 0, + 0, + 94, + 46, + -44, + -15 + ], + [ + 95, + 0, + 94, + 46, + -44, + -15 + ], + [ + 190, + 0, + 94, + 46, + -44, + -15 + ], + [ + 285, + 0, + 94, + 46, + -44, + -15 + ], + [ + 380, + 0, + 94, + 46, + -44, + -15 + ], + [ + 0, + 47, + 94, + 46, + -44, + -15 + ], + [ + 95, + 47, + 94, + 46, + -44, + -15 + ], + [ + 190, + 47, + 94, + 46, + -44, + -15 + ], + [ + 285, + 47, + 94, + 46, + -44, + -15 + ], + [ + 380, + 47, + 94, + 46, + -44, + -15 + ], + [ + 0, + 94, + 94, + 46, + -44, + -15 + ], + [ + 95, + 94, + 94, + 46, + -44, + -15 + ], + [ + 190, + 94, + 94, + 46, + -44, + -15 + ], + [ + 285, + 94, + 94, + 46, + -44, + -15 + ], + [ + 380, + 94, + 94, + 46, + -44, + -15 + ], + [ + 0, + 141, + 94, + 46, + -44, + -15 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/staminafront.png b/public/overlays/staminafront.png new file mode 100644 index 0000000..1e4e249 Binary files /dev/null and b/public/overlays/staminafront.png differ diff --git a/public/overlays/teleport.png b/public/overlays/teleport.png index 8454713..04efeaa 100644 Binary files a/public/overlays/teleport.png and b/public/overlays/teleport.png differ diff --git a/public/overlays/thorns.json b/public/overlays/thorns.json new file mode 100644 index 0000000..ae2fb67 --- /dev/null +++ b/public/overlays/thorns.json @@ -0,0 +1,172 @@ +{ + "name": "thorns", + "celFile": "AuraThornsFront", + "width": 512, + "height": 127, + "directions": 1, + "frames": 18, + "framesPerDirection": 18, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -45, + "top": -6, + "width": 89, + "height": 31 + }, + "groups": [ + [ + [ + 0, + 0, + 89, + 31, + -45, + -6 + ], + [ + 90, + 0, + 89, + 31, + -45, + -6 + ], + [ + 180, + 0, + 89, + 31, + -45, + -6 + ], + [ + 270, + 0, + 89, + 31, + -45, + -6 + ], + [ + 360, + 0, + 89, + 31, + -45, + -6 + ], + [ + 0, + 32, + 89, + 31, + -45, + -6 + ], + [ + 90, + 32, + 89, + 31, + -45, + -6 + ], + [ + 180, + 32, + 89, + 31, + -45, + -6 + ], + [ + 270, + 32, + 89, + 31, + -45, + -6 + ], + [ + 360, + 32, + 89, + 31, + -45, + -6 + ], + [ + 0, + 64, + 89, + 31, + -45, + -6 + ], + [ + 90, + 64, + 89, + 31, + -45, + -6 + ], + [ + 180, + 64, + 89, + 31, + -45, + -6 + ], + [ + 270, + 64, + 89, + 31, + -45, + -6 + ], + [ + 360, + 64, + 89, + 31, + -45, + -6 + ], + [ + 0, + 96, + 89, + 31, + -45, + -6 + ], + [ + 90, + 96, + 89, + 31, + -45, + -6 + ], + [ + 180, + 96, + 89, + 31, + -45, + -6 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/thorns.png b/public/overlays/thorns.png new file mode 100644 index 0000000..22e5f13 Binary files /dev/null and b/public/overlays/thorns.png differ diff --git a/public/overlays/vigor.json b/public/overlays/vigor.json new file mode 100644 index 0000000..1438f10 --- /dev/null +++ b/public/overlays/vigor.json @@ -0,0 +1,156 @@ +{ + "name": "vigor", + "celFile": "Stamina_front", + "width": 512, + "height": 187, + "directions": 1, + "frames": 16, + "framesPerDirection": 16, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -44, + "top": -15, + "width": 94, + "height": 46 + }, + "groups": [ + [ + [ + 0, + 0, + 94, + 46, + -44, + -15 + ], + [ + 95, + 0, + 94, + 46, + -44, + -15 + ], + [ + 190, + 0, + 94, + 46, + -44, + -15 + ], + [ + 285, + 0, + 94, + 46, + -44, + -15 + ], + [ + 380, + 0, + 94, + 46, + -44, + -15 + ], + [ + 0, + 47, + 94, + 46, + -44, + -15 + ], + [ + 95, + 47, + 94, + 46, + -44, + -15 + ], + [ + 190, + 47, + 94, + 46, + -44, + -15 + ], + [ + 285, + 47, + 94, + 46, + -44, + -15 + ], + [ + 380, + 47, + 94, + 46, + -44, + -15 + ], + [ + 0, + 94, + 94, + 46, + -44, + -15 + ], + [ + 95, + 94, + 94, + 46, + -44, + -15 + ], + [ + 190, + 94, + 94, + 46, + -44, + -15 + ], + [ + 285, + 94, + 94, + 46, + -44, + -15 + ], + [ + 380, + 94, + 94, + 46, + -44, + -15 + ], + [ + 0, + 141, + 94, + 46, + -44, + -15 + ] + ] + ] +} \ No newline at end of file diff --git a/public/overlays/vigor.png b/public/overlays/vigor.png new file mode 100644 index 0000000..1e4e249 Binary files /dev/null and b/public/overlays/vigor.png differ diff --git a/scripts/pack-overlays.ts b/scripts/pack-overlays.ts index 6160c86..20e0516 100644 --- a/scripts/pack-overlays.ts +++ b/scripts/pack-overlays.ts @@ -70,7 +70,18 @@ export interface OverlayMeta { readonly groups: readonly (readonly OverlayFrameTuple[])[] } -export const OVERLAY_TARGETS = [ +export interface OverlayTarget { + readonly name: string + readonly celFile: string + readonly aliases?: readonly string[] + readonly animRate: number + readonly trans: number + readonly preDraw: boolean + readonly lightRadius: number + readonly lightColor: readonly [number, number, number] +} + +export const OVERLAY_TARGETS: readonly OverlayTarget[] = [ { name: 'fire_cast_1', celFile: 'FireCast_for_Sorceress', @@ -143,6 +154,207 @@ export const OVERLAY_TARGETS = [ lightRadius: 5, lightColor: [255, 255, 200] as const, }, + // 20 Authentic Diablo II v1.13c Paladin Aura Overlays + { + name: 'might', + celFile: 'AuraMightFront', + aliases: ['aura_might_front', 'aura_might'], + animRate: 16, + trans: 3, + preDraw: false, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + { + name: 'prayer', + celFile: 'AuraPrayerFront', + aliases: ['aura_prayer_front', 'aura_prayer'], + animRate: 8, + trans: 3, + preDraw: false, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + { + name: 'resist_fire', + celFile: 'AuraResistFireFront', + aliases: ['aura_resistfire'], + animRate: 16, + trans: 3, + preDraw: true, + lightRadius: 6, + lightColor: [255, 193, 103] as const, + }, + { + name: 'holy_fire', + celFile: 'AuraHolyFireFront', + aliases: ['aura_holyfire_front', 'aura_holyfire'], + animRate: 16, + trans: 3, + preDraw: false, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + { + name: 'thorns', + celFile: 'AuraThornsFront', + aliases: ['aura_thorns_front', 'aura_thorns'], + animRate: 16, + trans: 3, + preDraw: false, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + { + name: 'defiance', + celFile: 'AuraDefianceFront', + aliases: ['aura_defiance_front', 'aura_defiance'], + animRate: 8, + trans: 3, + preDraw: false, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + { + name: 'resist_cold', + celFile: 'AuraResistColdBack', + aliases: ['aura_resistcold'], + animRate: 16, + trans: 3, + preDraw: true, + lightRadius: 6, + lightColor: [210, 210, 255] as const, + }, + { + name: 'blessed_aim', + celFile: 'BlessedAim_front', + aliases: ['blessedaimfront', 'blessed_aim_front'], + animRate: 8, + trans: 3, + preDraw: false, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + { + name: 'cleansing', + celFile: 'Cleansing_front', + aliases: ['cleansingfront', 'cleansing_front'], + animRate: 8, + trans: 3, + preDraw: false, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + { + name: 'resist_lightning', + celFile: 'AuraResistLightningBack', + aliases: ['aura_resistlight'], + animRate: 16, + trans: 3, + preDraw: true, + lightRadius: 6, + lightColor: [255, 255, 200] as const, + }, + { + name: 'concentration', + celFile: 'Concentration_front', + aliases: ['concentrationfront', 'concentration_front'], + animRate: 3, + trans: 3, + preDraw: false, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + { + name: 'holy_freeze', + celFile: 'HolyFreeze', + aliases: ['holyfreeze', 'holywind'], + animRate: 8, + trans: 3, + preDraw: true, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + { + name: 'vigor', + celFile: 'Stamina_front', + aliases: ['staminafront', 'stamina_front', 'stamina'], + animRate: 8, + trans: 3, + preDraw: false, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + { + name: 'holy_shock', + celFile: 'HolyShock_front', + aliases: ['holyshockfront', 'holyshock_front', 'holyshock'], + animRate: 16, + trans: 3, + preDraw: false, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + { + name: 'sanctuary', + celFile: 'SanctuaryAura_Front', + aliases: ['sanctuaryfront', 'sanctuary_front'], + animRate: 16, + trans: 3, + preDraw: true, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + { + name: 'meditation', + celFile: 'Meditation', + aliases: ['meditationfront'], + animRate: 16, + trans: 3, + preDraw: false, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + { + name: 'fanaticism', + celFile: 'Fanatacism_Back', + aliases: ['fanaticismback', 'aura_fanatic', 'Fanatacism_Front'], + animRate: 6, + trans: 3, + preDraw: true, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + { + name: 'conviction', + celFile: 'Conviction', + aliases: ['convictionback'], + animRate: 6, + trans: 3, + preDraw: true, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + { + name: 'redemption', + celFile: 'Redemption', + aliases: ['redemptionback'], + animRate: 16, + trans: 3, + preDraw: true, + lightRadius: 0, + lightColor: [255, 255, 255] as const, + }, + { + name: 'salvation', + celFile: 'AuraResistAllFront', + aliases: ['aura_resistall_front', 'aura_resistall'], + animRate: 16, + trans: 3, + preDraw: false, + lightRadius: 6, + lightColor: [211, 148, 255] as const, + }, ] as const export async function bakeOverlays(projectRoot: string = process.cwd()): Promise> { @@ -210,11 +422,19 @@ export async function bakeOverlays(projectRoot: string = process.cwd()): Promise metaRecord[target.name] = meta metaRecord[target.celFile] = meta + if (target.celFile.toLowerCase() !== target.celFile) { + metaRecord[target.celFile.toLowerCase()] = meta + } + + const allKeys = new Set([target.name, target.celFile, ...(target.aliases ?? [])]) + for (const alias of target.aliases ?? []) { + metaRecord[alias] = meta + } const jsonStr = JSON.stringify(meta, null, 2) - // Write primary name (e.g. fire_cast_1.png) and celFile alias (e.g. FireCast_for_Sorceress.png) - for (const fileKey of [target.name, target.celFile]) { + // Write primary name and aliases to both public/overlays/ and samples/d2-packs/overlays/ + for (const fileKey of allKeys) { writeFileSync(join(publicOutDir, `${fileKey}.png`), packed.png) writeFileSync(join(publicOutDir, `${fileKey}.json`), jsonStr, 'utf-8') writeFileSync(join(packOutDir, `${fileKey}.png`), packed.png) @@ -228,9 +448,63 @@ export async function bakeOverlays(projectRoot: string = process.cwd()): Promise ) } + const TARGET_CONST_NAMES: Record = { + fire_cast_1: 'FIRE_CAST_1_META', + fire_cast_2: 'FIRE_CAST_2_META', + ice_cast_1: 'ICE_CAST_1_META', + ice_cast_2: 'ICE_CAST_2_META', + ice_cast_3: 'ICE_CAST_3_META', + light_cast_1: 'LIGHT_CAST_1_META', + light_cast_2: 'LIGHT_CAST_2_META', + teleport: 'TELEPORT_META', + might: 'MIGHT_AURA_META', + prayer: 'PRAYER_AURA_META', + resist_fire: 'RESIST_FIRE_AURA_META', + holy_fire: 'HOLY_FIRE_AURA_META', + thorns: 'THORNS_AURA_META', + defiance: 'DEFIANCE_AURA_META', + resist_cold: 'RESIST_COLD_AURA_META', + blessed_aim: 'BLESSED_AIM_AURA_META', + cleansing: 'CLEANSING_AURA_META', + resist_lightning: 'RESIST_LIGHTNING_AURA_META', + concentration: 'CONCENTRATION_AURA_META', + holy_freeze: 'HOLY_FREEZE_AURA_META', + vigor: 'VIGOR_AURA_META', + holy_shock: 'HOLY_SHOCK_AURA_META', + sanctuary: 'SANCTUARY_AURA_META', + meditation: 'MEDITATION_AURA_META', + fanaticism: 'FANATICISM_AURA_META', + conviction: 'CONVICTION_AURA_META', + redemption: 'REDEMPTION_AURA_META', + salvation: 'SALVATION_AURA_META', + } + + const individualConsts = OVERLAY_TARGETS.map(t => { + const constName = TARGET_CONST_NAMES[t.name] ?? `${t.name.toUpperCase()}_META` + return `export const ${constName}: OverlayMeta = ${JSON.stringify(metaRecord[t.name], null, 2)}` + }).join('\n\n') + + const overlayMetasEntries: string[] = [] + const seenKeys = new Set() + for (const t of OVERLAY_TARGETS) { + const constName = TARGET_CONST_NAMES[t.name] ?? `${t.name.toUpperCase()}_META` + const keys = new Set([t.name, t.celFile, ...(t.aliases ?? [])]) + for (const k of keys) { + if (!seenKeys.has(k)) { + seenKeys.add(k) + overlayMetasEntries.push(` ${JSON.stringify(k)}: ${constName},`) + } + const lower = k.toLowerCase() + if (!seenKeys.has(lower)) { + seenKeys.add(lower) + overlayMetasEntries.push(` ${JSON.stringify(lower)}: ${constName},`) + } + } + } + // Generate src/render/overlays-meta.ts const metaTsContent = `/** - * Authentic Diablo II v1.13c Cast Overlay Atlas Metadata. + * Authentic Diablo II v1.13c Cast & Aura Overlay Atlas Metadata. * Auto-generated by scripts/pack-overlays.ts. * Enforces Zero Runtime MPQ/DLL Architectural Invariant. */ @@ -277,39 +551,14 @@ export interface OverlayMeta { readonly groups: readonly (readonly OverlayFrameTuple[])[] } -export const FIRE_CAST_1_META: OverlayMeta = ${JSON.stringify(metaRecord['fire_cast_1'], null, 2)} +${individualConsts} -export const FIRE_CAST_2_META: OverlayMeta = ${JSON.stringify(metaRecord['fire_cast_2'], null, 2)} - -export const ICE_CAST_1_META: OverlayMeta = ${JSON.stringify(metaRecord['ice_cast_1'], null, 2)} - -export const ICE_CAST_2_META: OverlayMeta = ${JSON.stringify(metaRecord['ice_cast_2'], null, 2)} - -export const ICE_CAST_3_META: OverlayMeta = ${JSON.stringify(metaRecord['ice_cast_3'], null, 2)} - -export const LIGHT_CAST_1_META: OverlayMeta = ${JSON.stringify(metaRecord['light_cast_1'], null, 2)} - -export const LIGHT_CAST_2_META: OverlayMeta = ${JSON.stringify(metaRecord['light_cast_2'], null, 2)} - -export const TELEPORT_META: OverlayMeta = ${JSON.stringify(metaRecord['teleport'], null, 2)} +export const ALL_OVERLAY_NAMES: readonly string[] = [ +${OVERLAY_TARGETS.map(t => ` ${JSON.stringify(t.name)},`).join('\n')} +] export const OVERLAY_METAS: Readonly> = { - fire_cast_1: FIRE_CAST_1_META, - FireCast_for_Sorceress: FIRE_CAST_1_META, - fire_cast_2: FIRE_CAST_2_META, - FireCast2: FIRE_CAST_2_META, - ice_cast_1: ICE_CAST_1_META, - IceCastNew01: ICE_CAST_1_META, - ice_cast_2: ICE_CAST_2_META, - IceCastNew02: ICE_CAST_2_META, - ice_cast_3: ICE_CAST_3_META, - IceCastNew03: ICE_CAST_3_META, - light_cast_1: LIGHT_CAST_1_META, - LightningCast: LIGHT_CAST_1_META, - light_cast_2: LIGHT_CAST_2_META, - LightningCastRunesFront: LIGHT_CAST_2_META, - teleport: TELEPORT_META, - Teleport: TELEPORT_META, +${overlayMetasEntries.join('\n')} } ` const metaTsPath = join(projectRoot, 'src', 'render', 'overlays-meta.ts') diff --git a/src/game/engine.ts b/src/game/engine.ts index 8eb3c55..31b09d7 100644 --- a/src/game/engine.ts +++ b/src/game/engine.ts @@ -2,8 +2,8 @@ import { tickCombat, createWorld, spawnMonsters, spawnMonsterPacks, damageMonste import type { CombatWorld, CombatOptions, MonsterPack, MonsterStats, SafeZone } from './combat.ts' import { Inventory, rollDrop, goldItem, totalStat } from './items.ts' import type { Item, ItemBase, Affix } from './items.ts' -import { castSkill, tickProjectiles, CANONICAL_113C_MISSILES, ISO_GROUND_ASPECT_RATIO, createActiveOverlay, getSkillCastOverlay } from './skills.ts' -import type { SkillDef, Projectile, ActiveOverlay } from './skills.ts' +import { castSkill, tickProjectiles, CANONICAL_113C_MISSILES, ISO_GROUND_ASPECT_RATIO, createActiveOverlay, getSkillCastOverlay, isAuraSkill, getAuraOverlayName } from './skills.ts' +import type { SkillDef, Projectile, ActiveOverlay, CreateActiveOverlayOptions } from './skills.ts' import { QuestLog, npcDialog } from './quests.ts' import type { NpcDef, QuestDef } from './quests.ts' import { Rng } from './rng.ts' @@ -144,6 +144,19 @@ export interface GameEngineOptions { * Tuning options for MonsterStreamingManager when created from roomPacks. */ streamingOptions?: MonsterStreamingOptions | undefined + /** + * Whether the level is a town (e.g. Rogue Encampment, Lut Gholein, Kurast Docks, Pandemonium Fortress, Harrogath). + * In town, friendly auras only affect self; enemy debuffs, pulses, and corpse redemption are suspended. + */ + isTown?: boolean | undefined + /** + * Current level ID (e.g. 1 for Rogue Encampment). + */ + levelId?: number | undefined + /** + * Optional allies (mercenaries, party members, summons) for aura propagation in wilderness. + */ + allies?: readonly any[] | undefined } export interface GameEngineMetrics { @@ -188,6 +201,12 @@ export class GameEngine { selectedSkill = 0 npcEntities: NpcEntity[] = [] dialog: string[] = [] + isTown = false + levelId = 1 + allies: any[] = [] + activeAuraSkillId: number | null = null + activeAuraOverlay: ActiveOverlay | null = null + activeAuraLevel = 1 /** * Lazy room population driver, when the level supplied a room plan. * @@ -215,6 +234,9 @@ export class GameEngine { } constructor(public terrain: WorldMapProvider, public opts: GameEngineOptions) { + this.isTown = opts.isTown ?? false + this.levelId = opts.levelId ?? 1 + this.allies = opts.allies ? [...opts.allies] : [] const rooms = opts.roomPacks ?? opts.streamingRooms if (opts.streamingManager !== undefined) { this.streamingManager = opts.streamingManager @@ -269,26 +291,71 @@ export class GameEngine { } /** - * Spawns an active cast overlay effect on an entity (defaulting to the player). + * Activates or deactivates an authentic Diablo II v1.13c aura on the player. + * If skillId is an aura skill (e.g. Conviction 123, Holy Freeze 114, Defiance 104), + * sets the active aura, spawns the ground looping overlay on the player, + * and synchronizes monster foot overlays according to 1.13c rules. */ + updateActiveAura(skillId: number | null, slvl = 1): void { + const normalizedSkillId = skillId !== null && isAuraSkill(skillId) ? skillId : null + if (this.activeAuraSkillId === normalizedSkillId && this.activeAuraLevel === slvl) { + return + } + + // Clean up previous aura overlay and any enemy conviction overlays + if (this.activeAuraSkillId !== null) { + for (const ov of this.overlays) { + if (ov.isAura) { + ov.expired = true + } + } + this.overlays = this.overlays.filter(ov => !ov.expired) + this.activeAuraOverlay = null + } + + this.activeAuraSkillId = normalizedSkillId + this.activeAuraLevel = slvl + + if (normalizedSkillId !== null) { + const ovName = getAuraOverlayName(normalizedSkillId) + if (ovName) { + const player = this.world.player + const auraOverlay = createActiveOverlay( + ovName, + { x: player.x, y: player.y }, + 'player', + undefined, + { + loop: true, + isAura: true, + auraSkillId: normalizedSkillId, + }, + ) + this.activeAuraOverlay = auraOverlay + this.overlays.push(auraOverlay) + } + } + } + /** * Spawns an active cast overlay effect on an entity (defaulting to the player). - * Replaces any existing active overlay for the same caster to prevent oversaturated additive stacking. + * Replaces any existing non-aura cast overlay for the same caster to prevent oversaturated additive stacking. */ spawnOverlay( overlayName: string, caster?: { x: number; y: number }, casterId = 'player', + options?: CreateActiveOverlayOptions, ): ActiveOverlay { const pos = caster ?? { x: this.world.player.x, y: this.world.player.y } - // Cleanly replace any ongoing cast overlay for this caster to prevent oversaturated additive stacking + // Cleanly replace any ongoing non-aura cast overlay for this caster to prevent oversaturated additive stacking for (const ov of this.overlays) { - if (ov.casterId === casterId) { + if (ov.casterId === casterId && !ov.isAura) { ov.expired = true } } this.overlays = this.overlays.filter(ov => !ov.expired) - const overlay = createActiveOverlay(overlayName, pos, casterId) + const overlay = createActiveOverlay(overlayName, pos, casterId, undefined, options) this.overlays.push(overlay) return overlay } @@ -484,15 +551,169 @@ export class GameEngine { if (overlay.casterId === 'player') { overlay.x = player.x overlay.y = player.y + } else if (overlay.targetMonsterIndex !== undefined) { + const mon = this.world.monsters[overlay.targetMonsterIndex] + if (!mon || mon.state === 'dead' || mon.hp <= 0) { + overlay.expired = true + continue + } + overlay.x = mon.x + overlay.y = mon.y } overlay.frame += overlay.animRate / 25 if (overlay.frame >= overlay.maxFrames) { - overlay.expired = true + if (overlay.loop) { + overlay.frame = overlay.frame % overlay.maxFrames + } else { + overlay.expired = true + } } } this.overlays = this.overlays.filter(overlay => !overlay.expired) } + // Periodic & continuous aura simulation (D2 v1.13c parity) + if (this.activeAuraSkillId !== null) { + const auraId = this.activeAuraSkillId + const slvl = this.activeAuraLevel + const inTown = this.isTown || [1, 40, 75, 103, 109].includes(this.levelId) + + // Conviction (123): + // - Caster has ground ring visual only, zero resistance/defense reduction on self! + // - In wilderness: hostile enemies in range receive -Def% & -Res% and display convictionback ring under feet. + // - In town: enemy debuffs and enemy overlays are completely suspended. + if (auraId === 123) { + const auraRadius = Math.round(((40 + slvl * 8) * 2 / 3) * 16) + if (!inTown) { + const activeIndices = new Set() + for (const monster of this.world.monsters) { + if (monster.state === 'dead' || monster.hp <= 0) continue + const dist = Math.hypot(monster.x - player.x, monster.y - player.y) + if (dist <= auraRadius) { + activeIndices.add(monster.index) + const hasOv = this.overlays.some( + ov => !ov.expired && ov.isAura && ov.auraSkillId === 123 && ov.targetMonsterIndex === monster.index, + ) + if (!hasOv) { + this.overlays.push( + createActiveOverlay( + 'convictionback', + { x: monster.x, y: monster.y }, + `monster_${monster.index}`, + undefined, + { + loop: true, + isAura: true, + auraSkillId: 123, + targetMonsterIndex: monster.index, + }, + ), + ) + } + } + } + // Remove conviction overlay from monsters that died or walked out of range + for (const ov of this.overlays) { + if (ov.isAura && ov.auraSkillId === 123 && ov.targetMonsterIndex !== undefined) { + if (!activeIndices.has(ov.targetMonsterIndex)) { + ov.expired = true + } + } + } + } else { + // In town: expire all monster conviction overlays + for (const ov of this.overlays) { + if (ov.isAura && ov.auraSkillId === 123 && ov.targetMonsterIndex !== undefined) { + ov.expired = true + } + } + } + } + + // Holy Freeze (114): + // - Caster displays holyfreeze cyan ring. + // - In wilderness: periodic cold pulse damage & chill (slow + blue tint) to enemies in range. + // - D2 Ground Truth Invariant: Holy Freeze NEVER displays an aura ring under enemy feet! + // - In town: pulse damage & slow are completely suspended. + if (auraId === 114 && !inTown) { + if (this.world.tick % 50 === 0) { + const auraRadius = Math.round(((40 + slvl * 8) * 2 / 3) * 16) + const coldDmg = Math.max(1, Math.round(5 + slvl * 2.5)) + for (const monster of this.world.monsters) { + if (monster.state === 'dead' || monster.hp <= 0) continue + const dist = Math.hypot(monster.x - player.x, monster.y - player.y) + if (dist <= auraRadius) { + damageMonster(this.world, monster.index, coldDmg) + monster.chillTicks = 100 // 4 seconds slow & blue tint + } + } + } + } + + // Holy Fire (102) & Holy Shock (118) in wilderness: + if ((auraId === 102 || auraId === 118) && !inTown) { + if (this.world.tick % 50 === 0) { + const auraRadius = Math.round(((40 + slvl * 8) * 2 / 3) * 16) + const pulseDmg = auraId === 102 ? Math.max(1, Math.round(3 + slvl * 2)) : Math.max(1, Math.round(4 + slvl * 3)) + for (const monster of this.world.monsters) { + if (monster.state === 'dead' || monster.hp <= 0) continue + const dist = Math.hypot(monster.x - player.x, monster.y - player.y) + if (dist <= auraRadius) { + damageMonster(this.world, monster.index, pulseDmg) + } + } + } + } + + // Prayer (99): + // - Periodic heal every 50 ticks (2 seconds) + // - In town: heals only self + // - In wilderness: heals self and allies + if (auraId === 99) { + if (this.world.tick % 50 === 0) { + const heal = Math.max(1, Math.round(2 + slvl * 1.5)) + player.hp = Math.min(player.maxHp, player.hp + heal) + if (!inTown && this.allies.length > 0) { + for (const ally of this.allies) { + if (ally && typeof ally.hp === 'number' && typeof ally.maxHp === 'number') { + ally.hp = Math.min(ally.maxHp, ally.hp + heal) + } + } + } + } + } + + // Meditation (120): + // - Boosts mana recovery + if (auraId === 120) { + if (this.world.tick % 10 === 0) { + player.mana = Math.min(player.maxMana, player.mana + 1) + } + } + + // Redemption (124): + // - In wilderness: redeems nearby corpses every 50 ticks to heal HP & Mana + // - In town: corpse consumption is completely suspended + if (auraId === 124 && !inTown) { + if (this.world.tick % 50 === 0) { + const auraRadius = Math.round(((40 + slvl * 8) * 2 / 3) * 16) + for (const monster of this.world.monsters) { + if (monster.state === 'dead' && monster.corpseTicks > 0) { + const dist = Math.hypot(monster.x - player.x, monster.y - player.y) + if (dist <= auraRadius) { + monster.corpseTicks = 0 // consume corpse + const restoreHp = Math.round(player.maxHp * 0.15) + const restoreMana = Math.round(player.maxMana * 0.15) + player.hp = Math.min(player.maxHp, player.hp + restoreHp) + player.mana = Math.min(player.maxMana, player.mana + restoreMana) + break // up to 1 corpse per pulse tick + } + } + } + } + } + } + if (input.talking) { let nearest: { def: NpcDef; x: number; y: number } | null = null let best = this.opts.talkRadius diff --git a/src/game/engine/aura-scanner.ts b/src/game/engine/aura-scanner.ts index 19c58e4..c2b4793 100644 --- a/src/game/engine/aura-scanner.ts +++ b/src/game/engine/aura-scanner.ts @@ -33,6 +33,10 @@ export interface AuraPulseOutcome { readonly corpsesRedeemed: number } +export interface AuraPulseOptions { + readonly isTown?: boolean | undefined +} + export class AuraScanner { readonly registry: D2DataRegistry private readonly activeAuras = new Map() @@ -76,6 +80,7 @@ export class AuraScanner { /** * Execute an immediate or periodic aura pulse across `allies`, `enemies`, and `corpses`. + * Enforces 1.13c town vs wilderness filtering and Conviction caster immunity. */ pulseAura( aura: ActiveAuraSource, @@ -83,6 +88,7 @@ export class AuraScanner { allies: readonly CombatUnitContext[], enemies: readonly CombatUnitContext[], corpses?: { id: string; consumed: boolean }[], + options?: AuraPulseOptions, ): AuraPulseOutcome { const { sourceUnit, skill, slvl } = aura const blvl = sourceUnit.statList.getBaseSkillLevel(skill.id) @@ -116,8 +122,12 @@ export class AuraScanner { stats['concentration_damage_pct'] = evaluateCalc('ln12', calcCtx) } + const isTown = options?.isTown ?? false const stateDuration = aura.pulseIntervalTicks + 5 const selfState = skill.auraState || skill.name.toLowerCase().replace(/\s+/g, '') + + // Conviction (`123`): Caster receives ground ring visual only, zero resistance/defense reduction on self! + const selfStats = skill.id === 123 ? {} : stats sourceUnit.stateBus.applyState({ stateNameOrId: selfState, sourceUnitId: sourceUnit.id, @@ -125,7 +135,7 @@ export class AuraScanner { slvl, durationFrames: stateDuration, currentFrame: currentTick, - stats, + stats: selfStats, isAuraOverride: true, }) @@ -134,8 +144,11 @@ export class AuraScanner { let pulseDamageDealt = 0 let corpsesRedeemed = 0 - // Friendly stat aura (`srvdofunc = 65` or Oak Sage / Wolverine / Barbs) - if (skill.srvDoFunc === 65 || skill.id === 296 || skill.id === 297 || skill.id === 298) { + // Friendly stat aura (`srvdofunc = 65` or Oak Sage / Wolverine / Barbs): + // Town vs Wilderness Filtering: + // In town: only self receives the aura buff; allies, mercenaries, and summons are skipped. + // In wilderness: broadcasts to self, player mercenary, party members, party mercenaries, and summons. + if (!isTown && (skill.srvDoFunc === 65 || skill.id === 296 || skill.id === 297 || skill.id === 298)) { const tgtState = skill.auraTgtState || selfState for (const ally of allies) { if (ally.id === sourceUnit.id) continue @@ -153,93 +166,97 @@ export class AuraScanner { } } - // Conviction (`123`): applies `conviction` (`conviction_pierce` + `-defense`) to enemies - if (skill.id === 123) { - const pierce = Math.min(150, evaluateCalc('ln34', calcCtx)) - const defPenalty = -evaluateCalc('ln12', calcCtx) - for (const enemy of enemies) { - if (enemy.statList.getHp256() <= 0) continue - enemy.stateBus.applyState({ - stateNameOrId: skill.auraTgtState || 'conviction', - sourceUnitId: sourceUnit.id, - sourceSkillId: skill.id, - slvl, - durationFrames: stateDuration, - currentFrame: currentTick, - stats: { - conviction_pierce: pierce, - item_armor_percent: defPenalty, - }, - isAuraOverride: true, - }) - enemiesAffected += 1 - } - } - - // Radial damage auras (`Holy Fire` 102, `Holy Freeze` 114, `Holy Shock` 118, `Sanctuary` 119) - if (skill.id === 102 || skill.id === 114 || skill.id === 118 || skill.id === 119) { - const baseMin = compute5BandScaling( - slvl, - skill.eMin, - skill.eMinLev1, - skill.eMinLev2, - skill.eMinLev3, - skill.eMinLev4, - skill.eMinLev5, - ) - const baseMax = compute5BandScaling( - slvl, - skill.eMax, - skill.eMaxLev1, - skill.eMaxLev2, - skill.eMaxLev3, - skill.eMaxLev4, - skill.eMaxLev5, - ) - const synPct = skill.eDmgSymPerCalc ? evaluateCalc(skill.eDmgSymPerCalc, calcCtx) : 0 - const min256 = Math.trunc(((baseMin << skill.hitShift) * (100 + synPct)) / 100) - const max256 = Math.trunc(((baseMax << skill.hitShift) * (100 + synPct)) / 100) - - for (const enemy of enemies) { - if (enemy.statList.getHp256() <= 0) continue - if (skill.id === 119 && !enemy.isUndead) continue // Sanctuary only pulses vs Undead - - if (skill.auraTgtState) { + // In town, offensive / debuff auras against enemies and corpse redemption are suspended! + if (!isTown) { + // Conviction (`123`): applies `conviction` (`conviction_pierce` + `-defense`) to wilderness enemies + if (skill.id === 123) { + const pierce = Math.min(150, evaluateCalc('ln34', calcCtx)) + const defPenalty = -evaluateCalc('ln12', calcCtx) + for (const enemy of enemies) { + if (enemy.statList.getHp256() <= 0) continue enemy.stateBus.applyState({ - stateNameOrId: skill.auraTgtState, + stateNameOrId: skill.auraTgtState || 'conviction', sourceUnitId: sourceUnit.id, sourceSkillId: skill.id, slvl, durationFrames: stateDuration, currentFrame: currentTick, - stats: skill.id === 114 ? { item_slow: evaluateCalc('dm56', calcCtx) } : {}, + stats: { + conviction_pierce: pierce, + item_armor_percent: defPenalty, + }, isAuraOverride: true, }) + enemiesAffected += 1 } - - const out = executeSUnitDmg(sourceUnit, enemy, { - skillId: skill.id, - attackKind: 'spell', - elemType: skill.eType || (skill.id === 119 ? 'mag' : 'fire'), - elemMin256: min256, - elemMax256: max256, - autoHit: true, - unblockable: true, - }) - pulseDamageDealt += out.totalDamage - enemiesAffected += 1 } - } - // Redemption (`124`): consumes corpses to recover HP & Mana - if (skill.id === 124 && corpses) { - const recoverPts = evaluateCalc('ln34', calcCtx) - for (const c of corpses) { - if (!c.consumed) { - c.consumed = true - corpsesRedeemed += 1 - sourceUnit.statList.setHp256(sourceUnit.statList.getHp256() + recoverPts * FIXED_ONE) - sourceUnit.statList.setMana256(sourceUnit.statList.getMana256() + recoverPts * FIXED_ONE) + // Radial damage auras (`Holy Fire` 102, `Holy Freeze` 114, `Holy Shock` 118, `Sanctuary` 119) + if (skill.id === 102 || skill.id === 114 || skill.id === 118 || skill.id === 119) { + const baseMin = compute5BandScaling( + slvl, + skill.eMin, + skill.eMinLev1, + skill.eMinLev2, + skill.eMinLev3, + skill.eMinLev4, + skill.eMinLev5, + ) + const baseMax = compute5BandScaling( + slvl, + skill.eMax, + skill.eMaxLev1, + skill.eMaxLev2, + skill.eMaxLev3, + skill.eMaxLev4, + skill.eMaxLev5, + ) + const synPct = skill.eDmgSymPerCalc ? evaluateCalc(skill.eDmgSymPerCalc, calcCtx) : 0 + const min256 = Math.trunc(((baseMin << skill.hitShift) * (100 + synPct)) / 100) + const max256 = Math.trunc(((baseMax << skill.hitShift) * (100 + synPct)) / 100) + + for (const enemy of enemies) { + if (enemy.statList.getHp256() <= 0) continue + if (skill.id === 119 && !enemy.isUndead) continue // Sanctuary only pulses vs Undead + + // Holy Freeze (114): enemies receive item_slow stat, but NO ground overlay (holywindcold overlay is null) + if (skill.auraTgtState) { + enemy.stateBus.applyState({ + stateNameOrId: skill.auraTgtState, + sourceUnitId: sourceUnit.id, + sourceSkillId: skill.id, + slvl, + durationFrames: stateDuration, + currentFrame: currentTick, + stats: skill.id === 114 ? { item_slow: evaluateCalc('dm56', calcCtx) } : {}, + isAuraOverride: true, + }) + } + + const out = executeSUnitDmg(sourceUnit, enemy, { + skillId: skill.id, + attackKind: 'spell', + elemType: skill.eType || (skill.id === 119 ? 'mag' : 'fire'), + elemMin256: min256, + elemMax256: max256, + autoHit: true, + unblockable: true, + }) + pulseDamageDealt += out.totalDamage + enemiesAffected += 1 + } + } + + // Redemption (`124`): consumes corpses to recover HP & Mana + if (skill.id === 124 && corpses) { + const recoverPts = evaluateCalc('ln34', calcCtx) + for (const c of corpses) { + if (!c.consumed) { + c.consumed = true + corpsesRedeemed += 1 + sourceUnit.statList.setHp256(sourceUnit.statList.getHp256() + recoverPts * FIXED_ONE) + sourceUnit.statList.setMana256(sourceUnit.statList.getMana256() + recoverPts * FIXED_ONE) + } } } } @@ -262,11 +279,12 @@ export class AuraScanner { allies: readonly CombatUnitContext[], enemies: readonly CombatUnitContext[], corpses?: { id: string; consumed: boolean }[], + options?: AuraPulseOptions, ): AuraPulseOutcome[] { const outcomes: AuraPulseOutcome[] = [] for (const aura of this.activeAuras.values()) { if ((currentTick - aura.startTick) % aura.pulseIntervalTicks === 0) { - outcomes.push(this.pulseAura(aura, currentTick, allies, enemies, corpses)) + outcomes.push(this.pulseAura(aura, currentTick, allies, enemies, corpses, options)) } } return outcomes diff --git a/src/game/engine/combat-pipeline.ts b/src/game/engine/combat-pipeline.ts index 2f7f242..2d52955 100644 --- a/src/game/engine/combat-pipeline.ts +++ b/src/game/engine/combat-pipeline.ts @@ -34,6 +34,7 @@ export interface CombatUnitContext { readonly weaponMaxPhys?: number readonly weaponPoisonBitrate256?: number readonly weaponPoisonFrames?: number + readonly unitType?: 'player' | 'mercenary' | 'party' | 'party_mercenary' | 'minion' | 'monster' } export interface ResistanceResult { diff --git a/src/game/engine/world-arena.ts b/src/game/engine/world-arena.ts index 146c584..860cbf0 100644 --- a/src/game/engine/world-arena.ts +++ b/src/game/engine/world-arena.ts @@ -66,6 +66,7 @@ export class WorldArena { readonly slvl: number readonly player: CombatUnitContext readonly targets: CombatUnitContext[] = [] + readonly allies: CombatUnitContext[] = [] readonly targetPositions = new Map() readonly corpses: { id: string; consumed: boolean; baseMaxHp: number; x: number; y: number }[] = [] readonly animDispatcher: AnimDispatcher @@ -73,6 +74,7 @@ export class WorldArena { readonly auraScanner: AuraScanner readonly summonManager: SummonManager + isTown = false tickCount = 0 castCount = 0 actionFrameTriggered = false @@ -88,9 +90,11 @@ export class WorldArena { slvl?: number blvl?: number synergies?: readonly [number, number][] + isTown?: boolean }) { this.registry = params.registry this.skillId = params.skillId + this.isTown = params.isTown ?? false this.slvl = Math.max(1, params.slvl ?? 20) const blvl = Math.max(1, params.blvl ?? this.slvl) @@ -216,6 +220,30 @@ export class WorldArena { this.targetPositions.set(id, pos) } + addDummyAlly( + id: string, + name: string, + pos: { x: number; y: number } = { x: 0, y: 0 }, + opts: { unitType?: 'mercenary' | 'party' | 'party_mercenary' | 'minion' } = {}, + ): CombatUnitContext { + const st = new UnitStatList(this.registry, { + level: 80, + hitpoints: 1000 * FIXED_ONE, + maxhp: 1000 * FIXED_ONE, + armorclass: 500, + }) + const sb = new StateBus(st, this.registry) + const ally: CombatUnitContext = { + id, + name, + statList: st, + stateBus: sb, + unitType: opts.unitType ?? 'mercenary', + } + this.allies.push(ally) + return ally + } + /** * Cast or activate `this.skillId` (or an explicit `overrideSkillId`), stepping through * the `AnimData.d2` action frame and missile/pet ticks so gameplay effects take place immediately. @@ -258,6 +286,8 @@ export class WorldArena { currentTick: this.tickCount, targetX, targetY, + isTown: this.isTown, + allies: [this.player, ...this.allies], }) } else { const attempt = this.animDispatcher.startSkillAnimation({ @@ -289,6 +319,8 @@ export class WorldArena { currentTick: tick, targetX, targetY, + isTown: this.isTown, + allies: [this.player, ...this.allies], }) }) if (step.actionFired) break @@ -313,6 +345,8 @@ export class WorldArena { currentTick: this.tickCount, targetX, targetY, + isTown: this.isTown, + allies: [this.player, ...this.allies], }) } } @@ -338,6 +372,9 @@ export class WorldArena { for (const t of this.targets) { t.stateBus.tick(this.tickCount) } + for (const a of this.allies) { + a.stateBus.tick(this.tickCount) + } const mStep = this.missileEngine.tick(this.tickCount, this.targets, this.targetPositions) for (const h of mStep.hits) { @@ -345,7 +382,13 @@ export class WorldArena { } this.totalMissilesSpawned += mStep.subMissilesSpawned.length - const auraStep = this.auraScanner.tick(this.tickCount, [this.player], this.targets, this.corpses) + const auraStep = this.auraScanner.tick( + this.tickCount, + [this.player, ...this.allies], + this.targets, + this.corpses, + { isTown: this.isTown }, + ) for (const a of auraStep) { this.totalDamageDealt += a.pulseDamageDealt } diff --git a/src/game/skills.ts b/src/game/skills.ts index 3a3c4ea..f86795a 100644 --- a/src/game/skills.ts +++ b/src/game/skills.ts @@ -1241,6 +1241,647 @@ export const CANONICAL_113C_OVERLAYS: Readonly> = xOffset: 0, yOffset: 0, }, + // Authentic 1.13c Paladin Aura Overlays + might: { + overlay: 'aura_might_front', + filename: 'AuraMightFront', + frames: 15, + animRate: 16, + trans: 3, + preDraw: false, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + aura_might_front: { + overlay: 'aura_might_front', + filename: 'AuraMightFront', + frames: 15, + animRate: 16, + trans: 3, + preDraw: false, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + prayer: { + overlay: 'aura_prayer_front', + filename: 'AuraPrayerFront', + frames: 16, + animRate: 8, + trans: 3, + preDraw: false, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + aura_prayer_front: { + overlay: 'aura_prayer_front', + filename: 'AuraPrayerFront', + frames: 16, + animRate: 8, + trans: 3, + preDraw: false, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + resist_fire: { + overlay: 'aura_resistfire', + filename: 'AuraResistFireFront', + frames: 20, + animRate: 16, + trans: 3, + preDraw: true, + initRadius: 6, + radius: 6, + red: 255, + green: 193, + blue: 103, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + aura_resistfire: { + overlay: 'aura_resistfire', + filename: 'AuraResistFireFront', + frames: 20, + animRate: 16, + trans: 3, + preDraw: true, + initRadius: 6, + radius: 6, + red: 255, + green: 193, + blue: 103, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + holy_fire: { + overlay: 'aura_holyfire_front', + filename: 'AuraHolyFireFront', + frames: 19, + animRate: 16, + trans: 3, + preDraw: false, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + aura_holyfire_front: { + overlay: 'aura_holyfire_front', + filename: 'AuraHolyFireFront', + frames: 19, + animRate: 16, + trans: 3, + preDraw: false, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + thorns: { + overlay: 'aura_thorns_front', + filename: 'AuraThornsFront', + frames: 18, + animRate: 16, + trans: 3, + preDraw: false, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + aura_thorns_front: { + overlay: 'aura_thorns_front', + filename: 'AuraThornsFront', + frames: 18, + animRate: 16, + trans: 3, + preDraw: false, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + defiance: { + overlay: 'aura_defiance_front', + filename: 'AuraDefianceFront', + frames: 15, + animRate: 8, + trans: 3, + preDraw: false, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + aura_defiance_front: { + overlay: 'aura_defiance_front', + filename: 'AuraDefianceFront', + frames: 15, + animRate: 8, + trans: 3, + preDraw: false, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + resist_cold: { + overlay: 'aura_resistcold', + filename: 'AuraResistColdBack', + frames: 20, + animRate: 16, + trans: 3, + preDraw: true, + initRadius: 6, + radius: 6, + red: 210, + green: 210, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + aura_resistcold: { + overlay: 'aura_resistcold', + filename: 'AuraResistColdBack', + frames: 20, + animRate: 16, + trans: 3, + preDraw: true, + initRadius: 6, + radius: 6, + red: 210, + green: 210, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + blessed_aim: { + overlay: 'blessedaimfront', + filename: 'BlessedAim_front', + frames: 29, + animRate: 8, + trans: 3, + preDraw: false, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + blessedaimfront: { + overlay: 'blessedaimfront', + filename: 'BlessedAim_front', + frames: 29, + animRate: 8, + trans: 3, + preDraw: false, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + cleansing: { + overlay: 'cleansingfront', + filename: 'Cleansing_front', + frames: 16, + animRate: 8, + trans: 3, + preDraw: false, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + cleansingfront: { + overlay: 'cleansingfront', + filename: 'Cleansing_front', + frames: 16, + animRate: 8, + trans: 3, + preDraw: false, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + resist_lightning: { + overlay: 'aura_resistlight', + filename: 'AuraResistLightningBack', + frames: 20, + animRate: 16, + trans: 3, + preDraw: true, + initRadius: 6, + radius: 6, + red: 255, + green: 255, + blue: 200, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + aura_resistlight: { + overlay: 'aura_resistlight', + filename: 'AuraResistLightningBack', + frames: 20, + animRate: 16, + trans: 3, + preDraw: true, + initRadius: 6, + radius: 6, + red: 255, + green: 255, + blue: 200, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + concentration: { + overlay: 'concentrationfront', + filename: 'Concentration_front', + frames: 30, + animRate: 3, + trans: 3, + preDraw: false, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + concentrationfront: { + overlay: 'concentrationfront', + filename: 'Concentration_front', + frames: 30, + animRate: 3, + trans: 3, + preDraw: false, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + holy_freeze: { + overlay: 'holyfreeze', + filename: 'HolyFreeze', + frames: 15, + animRate: 8, + trans: 3, + preDraw: true, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + holyfreeze: { + overlay: 'holyfreeze', + filename: 'HolyFreeze', + frames: 15, + animRate: 8, + trans: 3, + preDraw: true, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + vigor: { + overlay: 'staminafront', + filename: 'Stamina_front', + frames: 16, + animRate: 8, + trans: 3, + preDraw: false, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + staminafront: { + overlay: 'staminafront', + filename: 'Stamina_front', + frames: 16, + animRate: 8, + trans: 3, + preDraw: false, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + holy_shock: { + overlay: 'holyshockfront', + filename: 'HolyShock_front', + frames: 14, + animRate: 16, + trans: 3, + preDraw: false, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + holyshockfront: { + overlay: 'holyshockfront', + filename: 'HolyShock_front', + frames: 14, + animRate: 16, + trans: 3, + preDraw: false, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + sanctuary: { + overlay: 'sanctuaryfront', + filename: 'SanctuaryAura_Front', + frames: 12, + animRate: 16, + trans: 3, + preDraw: true, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + sanctuaryfront: { + overlay: 'sanctuaryfront', + filename: 'SanctuaryAura_Front', + frames: 12, + animRate: 16, + trans: 3, + preDraw: true, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + meditation: { + overlay: 'meditationfront', + filename: 'Meditation', + frames: 20, + animRate: 16, + trans: 3, + preDraw: false, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + meditationfront: { + overlay: 'meditationfront', + filename: 'Meditation', + frames: 20, + animRate: 16, + trans: 3, + preDraw: false, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + fanaticism: { + overlay: 'fanaticismback', + filename: 'Fanatacism_Back', + frames: 30, + animRate: 6, + trans: 3, + preDraw: true, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + fanaticismback: { + overlay: 'fanaticismback', + filename: 'Fanatacism_Back', + frames: 30, + animRate: 6, + trans: 3, + preDraw: true, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + conviction: { + overlay: 'convictionback', + filename: 'Conviction', + frames: 21, + animRate: 6, + trans: 3, + preDraw: true, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + convictionback: { + overlay: 'convictionback', + filename: 'Conviction', + frames: 21, + animRate: 6, + trans: 3, + preDraw: true, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + redemption: { + overlay: 'redemptionback', + filename: 'Redemption', + frames: 12, + animRate: 16, + trans: 3, + preDraw: true, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + redemptionback: { + overlay: 'redemptionback', + filename: 'Redemption', + frames: 12, + animRate: 16, + trans: 3, + preDraw: true, + initRadius: 0, + radius: 0, + red: 255, + green: 255, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + salvation: { + overlay: 'aura_resistall_front', + filename: 'AuraResistAllFront', + frames: 20, + animRate: 16, + trans: 3, + preDraw: false, + initRadius: 6, + radius: 6, + red: 211, + green: 148, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, + aura_resistall_front: { + overlay: 'aura_resistall_front', + filename: 'AuraResistAllFront', + frames: 20, + animRate: 16, + trans: 3, + preDraw: false, + initRadius: 6, + radius: 6, + red: 211, + green: 148, + blue: 255, + numDirections: 1, + xOffset: 0, + yOffset: 0, + }, }) /** @@ -1397,6 +2038,17 @@ export interface ActiveOverlay { readonly lightRadius: number readonly lightColor: readonly [number, number, number] expired: boolean + readonly loop?: boolean | undefined + readonly targetMonsterIndex?: number | undefined + readonly isAura?: boolean | undefined + readonly auraSkillId?: number | undefined +} + +export interface CreateActiveOverlayOptions { + readonly loop?: boolean | undefined + readonly targetMonsterIndex?: number | undefined + readonly isAura?: boolean | undefined + readonly auraSkillId?: number | undefined } /** @@ -1407,6 +2059,7 @@ export function createActiveOverlay( caster: { x: number; y: number }, casterId = 'player', overlaySource?: Map | string, + options?: CreateActiveOverlayOptions, ): ActiveOverlay { const data = getOverlayTxtData(overlayName, overlaySource) return { @@ -1423,9 +2076,49 @@ export function createActiveOverlay( lightRadius: data.radius, lightColor: [data.red, data.green, data.blue] as const, expired: false, + loop: options?.loop, + targetMonsterIndex: options?.targetMonsterIndex, + isAura: options?.isAura, + auraSkillId: options?.auraSkillId, } } +/** Complete canonical mapping for all Paladin aura skills (IDs 98..125) to their 1.13c overlay name. */ +export const PALADIN_AURA_OVERLAYS: Readonly> = Object.freeze({ + 98: 'might', + 99: 'prayer', + 100: 'resist_fire', + 102: 'holy_fire', + 103: 'thorns', + 104: 'defiance', + 105: 'resist_cold', + 108: 'blessed_aim', + 109: 'cleansing', + 110: 'resist_lightning', + 113: 'concentration', + 114: 'holy_freeze', + 115: 'vigor', + 118: 'holy_shock', + 119: 'sanctuary', + 120: 'meditation', + 122: 'fanaticism', + 123: 'conviction', + 124: 'redemption', + 125: 'salvation', +}) + +export const PALADIN_AURA_SKILL_IDS: ReadonlySet = new Set( + Object.keys(PALADIN_AURA_OVERLAYS).map(Number), +) + +export function isAuraSkill(skillId: number): boolean { + return PALADIN_AURA_SKILL_IDS.has(skillId) +} + +export function getAuraOverlayName(skillId: number): string | null { + return PALADIN_AURA_OVERLAYS[skillId] ?? null +} + /** Complete canonical mapping for all Sorceress skills to their 1.13c castoverlay. */ export const SORCERESS_SKILL_CAST_OVERLAYS: Readonly> = Object.freeze({ 36: 'fire_cast_1', // Fire Bolt diff --git a/src/game/skills/registry.ts b/src/game/skills/registry.ts index a437230..97e526b 100644 --- a/src/game/skills/registry.ts +++ b/src/game/skills/registry.ts @@ -386,7 +386,15 @@ export function executeSkillCore113c(ctx: SkillExecContext): SkillExecOutcome { if (skill.aura || [65, 66, 81, 82].includes(effectiveDoFunc)) { const src = auraScanner.setActiveAura(caster, skill.id, evalResult.slvl, currentTick) if (src) { - const pulse = auraScanner.pulseAura(src, currentTick, [caster], targets, corpses) + const pulseAllies = ctx.allies ?? [caster] + const pulse = auraScanner.pulseAura( + src, + currentTick, + pulseAllies, + targets, + corpses, + ctx.isTown !== undefined ? { isTown: ctx.isTown } : undefined, + ) totalDamageDealt += pulse.pulseDamageDealt corpsesConsumed += pulse.corpsesRedeemed statesApplied.push(skill.auraState || skill.auraTgtState || skill.name.toLowerCase()) diff --git a/src/game/skills/types.ts b/src/game/skills/types.ts index fbc1809..689f836 100644 --- a/src/game/skills/types.ts +++ b/src/game/skills/types.ts @@ -66,6 +66,8 @@ export interface SkillExecContext { readonly currentTick: number readonly targetX: number readonly targetY: number + readonly isTown?: boolean | undefined + readonly allies?: readonly CombatUnitContext[] | undefined } export interface SkillExecOutcome { diff --git a/src/render/overlays-meta.ts b/src/render/overlays-meta.ts index 23cbd4b..a694596 100644 --- a/src/render/overlays-meta.ts +++ b/src/render/overlays-meta.ts @@ -1,5 +1,5 @@ /** - * Authentic Diablo II v1.13c Cast Overlay Atlas Metadata. + * Authentic Diablo II v1.13c Cast & Aura Overlay Atlas Metadata. * Auto-generated by scripts/pack-overlays.ts. * Enforces Zero Runtime MPQ/DLL Architectural Invariant. */ @@ -1190,21 +1190,3753 @@ export const TELEPORT_META: OverlayMeta = { ] } -export const OVERLAY_METAS: Readonly> = { - fire_cast_1: FIRE_CAST_1_META, - FireCast_for_Sorceress: FIRE_CAST_1_META, - fire_cast_2: FIRE_CAST_2_META, - FireCast2: FIRE_CAST_2_META, - ice_cast_1: ICE_CAST_1_META, - IceCastNew01: ICE_CAST_1_META, - ice_cast_2: ICE_CAST_2_META, - IceCastNew02: ICE_CAST_2_META, - ice_cast_3: ICE_CAST_3_META, - IceCastNew03: ICE_CAST_3_META, - light_cast_1: LIGHT_CAST_1_META, - LightningCast: LIGHT_CAST_1_META, - light_cast_2: LIGHT_CAST_2_META, - LightningCastRunesFront: LIGHT_CAST_2_META, - teleport: TELEPORT_META, - Teleport: TELEPORT_META, +export const MIGHT_AURA_META: OverlayMeta = { + "name": "might", + "celFile": "AuraMightFront", + "width": 512, + "height": 80, + "directions": 1, + "frames": 15, + "framesPerDirection": 15, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -36, + "top": -7, + "width": 72, + "height": 26 + }, + "groups": [ + [ + [ + 0, + 0, + 72, + 26, + -36, + -7 + ], + [ + 73, + 0, + 72, + 26, + -36, + -7 + ], + [ + 146, + 0, + 72, + 26, + -36, + -7 + ], + [ + 219, + 0, + 72, + 26, + -36, + -7 + ], + [ + 292, + 0, + 72, + 26, + -36, + -7 + ], + [ + 365, + 0, + 72, + 26, + -36, + -7 + ], + [ + 438, + 0, + 72, + 26, + -36, + -7 + ], + [ + 0, + 27, + 72, + 26, + -36, + -7 + ], + [ + 73, + 27, + 72, + 26, + -36, + -7 + ], + [ + 146, + 27, + 72, + 26, + -36, + -7 + ], + [ + 219, + 27, + 72, + 26, + -36, + -7 + ], + [ + 292, + 27, + 72, + 26, + -36, + -7 + ], + [ + 365, + 27, + 72, + 26, + -36, + -7 + ], + [ + 438, + 27, + 72, + 26, + -36, + -7 + ], + [ + 0, + 54, + 72, + 26, + -36, + -7 + ] + ] + ] +} + +export const PRAYER_AURA_META: OverlayMeta = { + "name": "prayer", + "celFile": "AuraPrayerFront", + "width": 512, + "height": 149, + "directions": 1, + "frames": 16, + "framesPerDirection": 16, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -42, + "top": -23, + "width": 83, + "height": 49 + }, + "groups": [ + [ + [ + 0, + 0, + 83, + 49, + -42, + -23 + ], + [ + 84, + 0, + 83, + 49, + -42, + -23 + ], + [ + 168, + 0, + 83, + 49, + -42, + -23 + ], + [ + 252, + 0, + 83, + 49, + -42, + -23 + ], + [ + 336, + 0, + 83, + 49, + -42, + -23 + ], + [ + 420, + 0, + 83, + 49, + -42, + -23 + ], + [ + 0, + 50, + 83, + 49, + -42, + -23 + ], + [ + 84, + 50, + 83, + 49, + -42, + -23 + ], + [ + 168, + 50, + 83, + 49, + -42, + -23 + ], + [ + 252, + 50, + 83, + 49, + -42, + -23 + ], + [ + 336, + 50, + 83, + 49, + -42, + -23 + ], + [ + 420, + 50, + 83, + 49, + -42, + -23 + ], + [ + 0, + 100, + 83, + 49, + -42, + -23 + ], + [ + 84, + 100, + 83, + 49, + -42, + -23 + ], + [ + 168, + 100, + 83, + 49, + -42, + -23 + ], + [ + 252, + 100, + 83, + 49, + -42, + -23 + ] + ] + ] +} + +export const RESIST_FIRE_AURA_META: OverlayMeta = { + "name": "resist_fire", + "celFile": "AuraResistFireFront", + "width": 512, + "height": 183, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 6, + "lightColor": [ + 255, + 193, + 103 + ], + "box": { + "left": -40, + "top": -24, + "width": 77, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 77, + 45, + -40, + -24 + ], + [ + 78, + 0, + 77, + 45, + -40, + -24 + ], + [ + 156, + 0, + 77, + 45, + -40, + -24 + ], + [ + 234, + 0, + 77, + 45, + -40, + -24 + ], + [ + 312, + 0, + 77, + 45, + -40, + -24 + ], + [ + 390, + 0, + 77, + 45, + -40, + -24 + ], + [ + 0, + 46, + 77, + 45, + -40, + -24 + ], + [ + 78, + 46, + 77, + 45, + -40, + -24 + ], + [ + 156, + 46, + 77, + 45, + -40, + -24 + ], + [ + 234, + 46, + 77, + 45, + -40, + -24 + ], + [ + 312, + 46, + 77, + 45, + -40, + -24 + ], + [ + 390, + 46, + 77, + 45, + -40, + -24 + ], + [ + 0, + 92, + 77, + 45, + -40, + -24 + ], + [ + 78, + 92, + 77, + 45, + -40, + -24 + ], + [ + 156, + 92, + 77, + 45, + -40, + -24 + ], + [ + 234, + 92, + 77, + 45, + -40, + -24 + ], + [ + 312, + 92, + 77, + 45, + -40, + -24 + ], + [ + 390, + 92, + 77, + 45, + -40, + -24 + ], + [ + 0, + 138, + 77, + 45, + -40, + -24 + ], + [ + 78, + 138, + 77, + 45, + -40, + -24 + ] + ] + ] +} + +export const HOLY_FIRE_AURA_META: OverlayMeta = { + "name": "holy_fire", + "celFile": "AuraHolyFireFront", + "width": 512, + "height": 143, + "directions": 1, + "frames": 19, + "framesPerDirection": 19, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -44, + "top": -10, + "width": 89, + "height": 35 + }, + "groups": [ + [ + [ + 0, + 0, + 89, + 35, + -44, + -10 + ], + [ + 90, + 0, + 89, + 35, + -44, + -10 + ], + [ + 180, + 0, + 89, + 35, + -44, + -10 + ], + [ + 270, + 0, + 89, + 35, + -44, + -10 + ], + [ + 360, + 0, + 89, + 35, + -44, + -10 + ], + [ + 0, + 36, + 89, + 35, + -44, + -10 + ], + [ + 90, + 36, + 89, + 35, + -44, + -10 + ], + [ + 180, + 36, + 89, + 35, + -44, + -10 + ], + [ + 270, + 36, + 89, + 35, + -44, + -10 + ], + [ + 360, + 36, + 89, + 35, + -44, + -10 + ], + [ + 0, + 72, + 89, + 35, + -44, + -10 + ], + [ + 90, + 72, + 89, + 35, + -44, + -10 + ], + [ + 180, + 72, + 89, + 35, + -44, + -10 + ], + [ + 270, + 72, + 89, + 35, + -44, + -10 + ], + [ + 360, + 72, + 89, + 35, + -44, + -10 + ], + [ + 0, + 108, + 89, + 35, + -44, + -10 + ], + [ + 90, + 108, + 89, + 35, + -44, + -10 + ], + [ + 180, + 108, + 89, + 35, + -44, + -10 + ], + [ + 270, + 108, + 89, + 35, + -44, + -10 + ] + ] + ] +} + +export const THORNS_AURA_META: OverlayMeta = { + "name": "thorns", + "celFile": "AuraThornsFront", + "width": 512, + "height": 127, + "directions": 1, + "frames": 18, + "framesPerDirection": 18, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -45, + "top": -6, + "width": 89, + "height": 31 + }, + "groups": [ + [ + [ + 0, + 0, + 89, + 31, + -45, + -6 + ], + [ + 90, + 0, + 89, + 31, + -45, + -6 + ], + [ + 180, + 0, + 89, + 31, + -45, + -6 + ], + [ + 270, + 0, + 89, + 31, + -45, + -6 + ], + [ + 360, + 0, + 89, + 31, + -45, + -6 + ], + [ + 0, + 32, + 89, + 31, + -45, + -6 + ], + [ + 90, + 32, + 89, + 31, + -45, + -6 + ], + [ + 180, + 32, + 89, + 31, + -45, + -6 + ], + [ + 270, + 32, + 89, + 31, + -45, + -6 + ], + [ + 360, + 32, + 89, + 31, + -45, + -6 + ], + [ + 0, + 64, + 89, + 31, + -45, + -6 + ], + [ + 90, + 64, + 89, + 31, + -45, + -6 + ], + [ + 180, + 64, + 89, + 31, + -45, + -6 + ], + [ + 270, + 64, + 89, + 31, + -45, + -6 + ], + [ + 360, + 64, + 89, + 31, + -45, + -6 + ], + [ + 0, + 96, + 89, + 31, + -45, + -6 + ], + [ + 90, + 96, + 89, + 31, + -45, + -6 + ], + [ + 180, + 96, + 89, + 31, + -45, + -6 + ] + ] + ] +} + +export const DEFIANCE_AURA_META: OverlayMeta = { + "name": "defiance", + "celFile": "AuraDefianceFront", + "width": 512, + "height": 143, + "directions": 1, + "frames": 15, + "framesPerDirection": 15, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -38, + "top": -24, + "width": 74, + "height": 47 + }, + "groups": [ + [ + [ + 0, + 0, + 74, + 47, + -38, + -24 + ], + [ + 75, + 0, + 74, + 47, + -38, + -24 + ], + [ + 150, + 0, + 74, + 47, + -38, + -24 + ], + [ + 225, + 0, + 74, + 47, + -38, + -24 + ], + [ + 300, + 0, + 74, + 47, + -38, + -24 + ], + [ + 375, + 0, + 74, + 47, + -38, + -24 + ], + [ + 0, + 48, + 74, + 47, + -38, + -24 + ], + [ + 75, + 48, + 74, + 47, + -38, + -24 + ], + [ + 150, + 48, + 74, + 47, + -38, + -24 + ], + [ + 225, + 48, + 74, + 47, + -38, + -24 + ], + [ + 300, + 48, + 74, + 47, + -38, + -24 + ], + [ + 375, + 48, + 74, + 47, + -38, + -24 + ], + [ + 0, + 96, + 74, + 47, + -38, + -24 + ], + [ + 75, + 96, + 74, + 47, + -38, + -24 + ], + [ + 150, + 96, + 74, + 47, + -38, + -24 + ] + ] + ] +} + +export const RESIST_COLD_AURA_META: OverlayMeta = { + "name": "resist_cold", + "celFile": "AuraResistColdBack", + "width": 512, + "height": 187, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 6, + "lightColor": [ + 210, + 210, + 255 + ], + "box": { + "left": -41, + "top": -24, + "width": 80, + "height": 46 + }, + "groups": [ + [ + [ + 0, + 0, + 80, + 46, + -41, + -24 + ], + [ + 81, + 0, + 80, + 46, + -41, + -24 + ], + [ + 162, + 0, + 80, + 46, + -41, + -24 + ], + [ + 243, + 0, + 80, + 46, + -41, + -24 + ], + [ + 324, + 0, + 80, + 46, + -41, + -24 + ], + [ + 405, + 0, + 80, + 46, + -41, + -24 + ], + [ + 0, + 47, + 80, + 46, + -41, + -24 + ], + [ + 81, + 47, + 80, + 46, + -41, + -24 + ], + [ + 162, + 47, + 80, + 46, + -41, + -24 + ], + [ + 243, + 47, + 80, + 46, + -41, + -24 + ], + [ + 324, + 47, + 80, + 46, + -41, + -24 + ], + [ + 405, + 47, + 80, + 46, + -41, + -24 + ], + [ + 0, + 94, + 80, + 46, + -41, + -24 + ], + [ + 81, + 94, + 80, + 46, + -41, + -24 + ], + [ + 162, + 94, + 80, + 46, + -41, + -24 + ], + [ + 243, + 94, + 80, + 46, + -41, + -24 + ], + [ + 324, + 94, + 80, + 46, + -41, + -24 + ], + [ + 405, + 94, + 80, + 46, + -41, + -24 + ], + [ + 0, + 141, + 80, + 46, + -41, + -24 + ], + [ + 81, + 141, + 80, + 46, + -41, + -24 + ] + ] + ] +} + +export const BLESSED_AIM_AURA_META: OverlayMeta = { + "name": "blessed_aim", + "celFile": "BlessedAim_front", + "width": 512, + "height": 129, + "directions": 1, + "frames": 29, + "framesPerDirection": 29, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -39, + "top": -5, + "width": 78, + "height": 25 + }, + "groups": [ + [ + [ + 0, + 0, + 78, + 25, + -39, + -5 + ], + [ + 79, + 0, + 78, + 25, + -39, + -5 + ], + [ + 158, + 0, + 78, + 25, + -39, + -5 + ], + [ + 237, + 0, + 78, + 25, + -39, + -5 + ], + [ + 316, + 0, + 78, + 25, + -39, + -5 + ], + [ + 395, + 0, + 78, + 25, + -39, + -5 + ], + [ + 0, + 26, + 78, + 25, + -39, + -5 + ], + [ + 79, + 26, + 78, + 25, + -39, + -5 + ], + [ + 158, + 26, + 78, + 25, + -39, + -5 + ], + [ + 237, + 26, + 78, + 25, + -39, + -5 + ], + [ + 316, + 26, + 78, + 25, + -39, + -5 + ], + [ + 395, + 26, + 78, + 25, + -39, + -5 + ], + [ + 0, + 52, + 78, + 25, + -39, + -5 + ], + [ + 79, + 52, + 78, + 25, + -39, + -5 + ], + [ + 158, + 52, + 78, + 25, + -39, + -5 + ], + [ + 237, + 52, + 78, + 25, + -39, + -5 + ], + [ + 316, + 52, + 78, + 25, + -39, + -5 + ], + [ + 395, + 52, + 78, + 25, + -39, + -5 + ], + [ + 0, + 78, + 78, + 25, + -39, + -5 + ], + [ + 79, + 78, + 78, + 25, + -39, + -5 + ], + [ + 158, + 78, + 78, + 25, + -39, + -5 + ], + [ + 237, + 78, + 78, + 25, + -39, + -5 + ], + [ + 316, + 78, + 78, + 25, + -39, + -5 + ], + [ + 395, + 78, + 78, + 25, + -39, + -5 + ], + [ + 0, + 104, + 78, + 25, + -39, + -5 + ], + [ + 79, + 104, + 78, + 25, + -39, + -5 + ], + [ + 158, + 104, + 78, + 25, + -39, + -5 + ], + [ + 237, + 104, + 78, + 25, + -39, + -5 + ], + [ + 316, + 104, + 78, + 25, + -39, + -5 + ] + ] + ] +} + +export const CLEANSING_AURA_META: OverlayMeta = { + "name": "cleansing", + "celFile": "Cleansing_front", + "width": 512, + "height": 183, + "directions": 1, + "frames": 16, + "framesPerDirection": 16, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -43, + "top": -11, + "width": 97, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 97, + 45, + -43, + -11 + ], + [ + 98, + 0, + 97, + 45, + -43, + -11 + ], + [ + 196, + 0, + 97, + 45, + -43, + -11 + ], + [ + 294, + 0, + 97, + 45, + -43, + -11 + ], + [ + 392, + 0, + 97, + 45, + -43, + -11 + ], + [ + 0, + 46, + 97, + 45, + -43, + -11 + ], + [ + 98, + 46, + 97, + 45, + -43, + -11 + ], + [ + 196, + 46, + 97, + 45, + -43, + -11 + ], + [ + 294, + 46, + 97, + 45, + -43, + -11 + ], + [ + 392, + 46, + 97, + 45, + -43, + -11 + ], + [ + 0, + 92, + 97, + 45, + -43, + -11 + ], + [ + 98, + 92, + 97, + 45, + -43, + -11 + ], + [ + 196, + 92, + 97, + 45, + -43, + -11 + ], + [ + 294, + 92, + 97, + 45, + -43, + -11 + ], + [ + 392, + 92, + 97, + 45, + -43, + -11 + ], + [ + 0, + 138, + 97, + 45, + -43, + -11 + ] + ] + ] +} + +export const RESIST_LIGHTNING_AURA_META: OverlayMeta = { + "name": "resist_lightning", + "celFile": "AuraResistLightningBack", + "width": 512, + "height": 183, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 6, + "lightColor": [ + 255, + 255, + 200 + ], + "box": { + "left": -41, + "top": -24, + "width": 79, + "height": 45 + }, + "groups": [ + [ + [ + 0, + 0, + 79, + 45, + -41, + -24 + ], + [ + 80, + 0, + 79, + 45, + -41, + -24 + ], + [ + 160, + 0, + 79, + 45, + -41, + -24 + ], + [ + 240, + 0, + 79, + 45, + -41, + -24 + ], + [ + 320, + 0, + 79, + 45, + -41, + -24 + ], + [ + 400, + 0, + 79, + 45, + -41, + -24 + ], + [ + 0, + 46, + 79, + 45, + -41, + -24 + ], + [ + 80, + 46, + 79, + 45, + -41, + -24 + ], + [ + 160, + 46, + 79, + 45, + -41, + -24 + ], + [ + 240, + 46, + 79, + 45, + -41, + -24 + ], + [ + 320, + 46, + 79, + 45, + -41, + -24 + ], + [ + 400, + 46, + 79, + 45, + -41, + -24 + ], + [ + 0, + 92, + 79, + 45, + -41, + -24 + ], + [ + 80, + 92, + 79, + 45, + -41, + -24 + ], + [ + 160, + 92, + 79, + 45, + -41, + -24 + ], + [ + 240, + 92, + 79, + 45, + -41, + -24 + ], + [ + 320, + 92, + 79, + 45, + -41, + -24 + ], + [ + 400, + 92, + 79, + 45, + -41, + -24 + ], + [ + 0, + 138, + 79, + 45, + -41, + -24 + ], + [ + 80, + 138, + 79, + 45, + -41, + -24 + ] + ] + ] +} + +export const CONCENTRATION_AURA_META: OverlayMeta = { + "name": "concentration", + "celFile": "Concentration_front", + "width": 512, + "height": 375, + "directions": 1, + "frames": 30, + "framesPerDirection": 30, + "animRate": 3, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -58, + "top": -12, + "width": 108, + "height": 46 + }, + "groups": [ + [ + [ + 0, + 0, + 108, + 46, + -58, + -12 + ], + [ + 109, + 0, + 108, + 46, + -58, + -12 + ], + [ + 218, + 0, + 108, + 46, + -58, + -12 + ], + [ + 327, + 0, + 108, + 46, + -58, + -12 + ], + [ + 0, + 47, + 108, + 46, + -58, + -12 + ], + [ + 109, + 47, + 108, + 46, + -58, + -12 + ], + [ + 218, + 47, + 108, + 46, + -58, + -12 + ], + [ + 327, + 47, + 108, + 46, + -58, + -12 + ], + [ + 0, + 94, + 108, + 46, + -58, + -12 + ], + [ + 109, + 94, + 108, + 46, + -58, + -12 + ], + [ + 218, + 94, + 108, + 46, + -58, + -12 + ], + [ + 327, + 94, + 108, + 46, + -58, + -12 + ], + [ + 0, + 141, + 108, + 46, + -58, + -12 + ], + [ + 109, + 141, + 108, + 46, + -58, + -12 + ], + [ + 218, + 141, + 108, + 46, + -58, + -12 + ], + [ + 327, + 141, + 108, + 46, + -58, + -12 + ], + [ + 0, + 188, + 108, + 46, + -58, + -12 + ], + [ + 109, + 188, + 108, + 46, + -58, + -12 + ], + [ + 218, + 188, + 108, + 46, + -58, + -12 + ], + [ + 327, + 188, + 108, + 46, + -58, + -12 + ], + [ + 0, + 235, + 108, + 46, + -58, + -12 + ], + [ + 109, + 235, + 108, + 46, + -58, + -12 + ], + [ + 218, + 235, + 108, + 46, + -58, + -12 + ], + [ + 327, + 235, + 108, + 46, + -58, + -12 + ], + [ + 0, + 282, + 108, + 46, + -58, + -12 + ], + [ + 109, + 282, + 108, + 46, + -58, + -12 + ], + [ + 218, + 282, + 108, + 46, + -58, + -12 + ], + [ + 327, + 282, + 108, + 46, + -58, + -12 + ], + [ + 0, + 329, + 108, + 46, + -58, + -12 + ], + [ + 109, + 329, + 108, + 46, + -58, + -12 + ] + ] + ] +} + +export const HOLY_FREEZE_AURA_META: OverlayMeta = { + "name": "holy_freeze", + "celFile": "HolyFreeze", + "width": 512, + "height": 375, + "directions": 1, + "frames": 15, + "framesPerDirection": 15, + "animRate": 8, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -57, + "top": -50, + "width": 114, + "height": 93 + }, + "groups": [ + [ + [ + 0, + 0, + 114, + 93, + -57, + -50 + ], + [ + 115, + 0, + 114, + 93, + -57, + -50 + ], + [ + 230, + 0, + 114, + 93, + -57, + -50 + ], + [ + 345, + 0, + 114, + 93, + -57, + -50 + ], + [ + 0, + 94, + 114, + 93, + -57, + -50 + ], + [ + 115, + 94, + 114, + 93, + -57, + -50 + ], + [ + 230, + 94, + 114, + 93, + -57, + -50 + ], + [ + 345, + 94, + 114, + 93, + -57, + -50 + ], + [ + 0, + 188, + 114, + 93, + -57, + -50 + ], + [ + 115, + 188, + 114, + 93, + -57, + -50 + ], + [ + 230, + 188, + 114, + 93, + -57, + -50 + ], + [ + 345, + 188, + 114, + 93, + -57, + -50 + ], + [ + 0, + 282, + 114, + 93, + -57, + -50 + ], + [ + 115, + 282, + 114, + 93, + -57, + -50 + ], + [ + 230, + 282, + 114, + 93, + -57, + -50 + ] + ] + ] +} + +export const VIGOR_AURA_META: OverlayMeta = { + "name": "vigor", + "celFile": "Stamina_front", + "width": 512, + "height": 187, + "directions": 1, + "frames": 16, + "framesPerDirection": 16, + "animRate": 8, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -44, + "top": -15, + "width": 94, + "height": 46 + }, + "groups": [ + [ + [ + 0, + 0, + 94, + 46, + -44, + -15 + ], + [ + 95, + 0, + 94, + 46, + -44, + -15 + ], + [ + 190, + 0, + 94, + 46, + -44, + -15 + ], + [ + 285, + 0, + 94, + 46, + -44, + -15 + ], + [ + 380, + 0, + 94, + 46, + -44, + -15 + ], + [ + 0, + 47, + 94, + 46, + -44, + -15 + ], + [ + 95, + 47, + 94, + 46, + -44, + -15 + ], + [ + 190, + 47, + 94, + 46, + -44, + -15 + ], + [ + 285, + 47, + 94, + 46, + -44, + -15 + ], + [ + 380, + 47, + 94, + 46, + -44, + -15 + ], + [ + 0, + 94, + 94, + 46, + -44, + -15 + ], + [ + 95, + 94, + 94, + 46, + -44, + -15 + ], + [ + 190, + 94, + 94, + 46, + -44, + -15 + ], + [ + 285, + 94, + 94, + 46, + -44, + -15 + ], + [ + 380, + 94, + 94, + 46, + -44, + -15 + ], + [ + 0, + 141, + 94, + 46, + -44, + -15 + ] + ] + ] +} + +export const HOLY_SHOCK_AURA_META: OverlayMeta = { + "name": "holy_shock", + "celFile": "HolyShock_front", + "width": 512, + "height": 51, + "directions": 1, + "frames": 14, + "framesPerDirection": 14, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -37, + "top": -5, + "width": 72, + "height": 25 + }, + "groups": [ + [ + [ + 0, + 0, + 72, + 25, + -37, + -5 + ], + [ + 73, + 0, + 72, + 25, + -37, + -5 + ], + [ + 146, + 0, + 72, + 25, + -37, + -5 + ], + [ + 219, + 0, + 72, + 25, + -37, + -5 + ], + [ + 292, + 0, + 72, + 25, + -37, + -5 + ], + [ + 365, + 0, + 72, + 25, + -37, + -5 + ], + [ + 438, + 0, + 72, + 25, + -37, + -5 + ], + [ + 0, + 26, + 72, + 25, + -37, + -5 + ], + [ + 73, + 26, + 72, + 25, + -37, + -5 + ], + [ + 146, + 26, + 72, + 25, + -37, + -5 + ], + [ + 219, + 26, + 72, + 25, + -37, + -5 + ], + [ + 292, + 26, + 72, + 25, + -37, + -5 + ], + [ + 365, + 26, + 72, + 25, + -37, + -5 + ], + [ + 438, + 26, + 72, + 25, + -37, + -5 + ] + ] + ] +} + +export const SANCTUARY_AURA_META: OverlayMeta = { + "name": "sanctuary", + "celFile": "SanctuaryAura_Front", + "width": 512, + "height": 92, + "directions": 1, + "frames": 12, + "framesPerDirection": 12, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -59, + "top": -1, + "width": 119, + "height": 30 + }, + "groups": [ + [ + [ + 0, + 0, + 119, + 30, + -59, + -1 + ], + [ + 120, + 0, + 119, + 30, + -59, + -1 + ], + [ + 240, + 0, + 119, + 30, + -59, + -1 + ], + [ + 360, + 0, + 119, + 30, + -59, + -1 + ], + [ + 0, + 31, + 119, + 30, + -59, + -1 + ], + [ + 120, + 31, + 119, + 30, + -59, + -1 + ], + [ + 240, + 31, + 119, + 30, + -59, + -1 + ], + [ + 360, + 31, + 119, + 30, + -59, + -1 + ], + [ + 0, + 62, + 119, + 30, + -59, + -1 + ], + [ + 120, + 62, + 119, + 30, + -59, + -1 + ], + [ + 240, + 62, + 119, + 30, + -59, + -1 + ], + [ + 360, + 62, + 119, + 30, + -59, + -1 + ] + ] + ] +} + +export const MEDITATION_AURA_META: OverlayMeta = { + "name": "meditation", + "celFile": "Meditation", + "width": 512, + "height": 379, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -49, + "top": -81, + "width": 92, + "height": 94 + }, + "groups": [ + [ + [ + 0, + 0, + 92, + 94, + -49, + -81 + ], + [ + 93, + 0, + 92, + 94, + -49, + -81 + ], + [ + 186, + 0, + 92, + 94, + -49, + -81 + ], + [ + 279, + 0, + 92, + 94, + -49, + -81 + ], + [ + 372, + 0, + 92, + 94, + -49, + -81 + ], + [ + 0, + 95, + 92, + 94, + -49, + -81 + ], + [ + 93, + 95, + 92, + 94, + -49, + -81 + ], + [ + 186, + 95, + 92, + 94, + -49, + -81 + ], + [ + 279, + 95, + 92, + 94, + -49, + -81 + ], + [ + 372, + 95, + 92, + 94, + -49, + -81 + ], + [ + 0, + 190, + 92, + 94, + -49, + -81 + ], + [ + 93, + 190, + 92, + 94, + -49, + -81 + ], + [ + 186, + 190, + 92, + 94, + -49, + -81 + ], + [ + 279, + 190, + 92, + 94, + -49, + -81 + ], + [ + 372, + 190, + 92, + 94, + -49, + -81 + ], + [ + 0, + 285, + 92, + 94, + -49, + -81 + ], + [ + 93, + 285, + 92, + 94, + -49, + -81 + ], + [ + 186, + 285, + 92, + 94, + -49, + -81 + ], + [ + 279, + 285, + 92, + 94, + -49, + -81 + ], + [ + 372, + 285, + 92, + 94, + -49, + -81 + ] + ] + ] +} + +export const FANATICISM_AURA_META: OverlayMeta = { + "name": "fanaticism", + "celFile": "Fanatacism_Back", + "width": 512, + "height": 351, + "directions": 1, + "frames": 30, + "framesPerDirection": 30, + "animRate": 6, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -60, + "top": -32, + "width": 122, + "height": 43 + }, + "groups": [ + [ + [ + 0, + 0, + 122, + 43, + -60, + -32 + ], + [ + 123, + 0, + 122, + 43, + -60, + -32 + ], + [ + 246, + 0, + 122, + 43, + -60, + -32 + ], + [ + 369, + 0, + 122, + 43, + -60, + -32 + ], + [ + 0, + 44, + 122, + 43, + -60, + -32 + ], + [ + 123, + 44, + 122, + 43, + -60, + -32 + ], + [ + 246, + 44, + 122, + 43, + -60, + -32 + ], + [ + 369, + 44, + 122, + 43, + -60, + -32 + ], + [ + 0, + 88, + 122, + 43, + -60, + -32 + ], + [ + 123, + 88, + 122, + 43, + -60, + -32 + ], + [ + 246, + 88, + 122, + 43, + -60, + -32 + ], + [ + 369, + 88, + 122, + 43, + -60, + -32 + ], + [ + 0, + 132, + 122, + 43, + -60, + -32 + ], + [ + 123, + 132, + 122, + 43, + -60, + -32 + ], + [ + 246, + 132, + 122, + 43, + -60, + -32 + ], + [ + 369, + 132, + 122, + 43, + -60, + -32 + ], + [ + 0, + 176, + 122, + 43, + -60, + -32 + ], + [ + 123, + 176, + 122, + 43, + -60, + -32 + ], + [ + 246, + 176, + 122, + 43, + -60, + -32 + ], + [ + 369, + 176, + 122, + 43, + -60, + -32 + ], + [ + 0, + 220, + 122, + 43, + -60, + -32 + ], + [ + 123, + 220, + 122, + 43, + -60, + -32 + ], + [ + 246, + 220, + 122, + 43, + -60, + -32 + ], + [ + 369, + 220, + 122, + 43, + -60, + -32 + ], + [ + 0, + 264, + 122, + 43, + -60, + -32 + ], + [ + 123, + 264, + 122, + 43, + -60, + -32 + ], + [ + 246, + 264, + 122, + 43, + -60, + -32 + ], + [ + 369, + 264, + 122, + 43, + -60, + -32 + ], + [ + 0, + 308, + 122, + 43, + -60, + -32 + ], + [ + 123, + 308, + 122, + 43, + -60, + -32 + ] + ] + ] +} + +export const CONVICTION_AURA_META: OverlayMeta = { + "name": "conviction", + "celFile": "Conviction", + "width": 512, + "height": 311, + "directions": 1, + "frames": 21, + "framesPerDirection": 21, + "animRate": 6, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -54, + "top": -26, + "width": 109, + "height": 51 + }, + "groups": [ + [ + [ + 0, + 0, + 109, + 51, + -54, + -26 + ], + [ + 110, + 0, + 109, + 51, + -54, + -26 + ], + [ + 220, + 0, + 109, + 51, + -54, + -26 + ], + [ + 330, + 0, + 109, + 51, + -54, + -26 + ], + [ + 0, + 52, + 109, + 51, + -54, + -26 + ], + [ + 110, + 52, + 109, + 51, + -54, + -26 + ], + [ + 220, + 52, + 109, + 51, + -54, + -26 + ], + [ + 330, + 52, + 109, + 51, + -54, + -26 + ], + [ + 0, + 104, + 109, + 51, + -54, + -26 + ], + [ + 110, + 104, + 109, + 51, + -54, + -26 + ], + [ + 220, + 104, + 109, + 51, + -54, + -26 + ], + [ + 330, + 104, + 109, + 51, + -54, + -26 + ], + [ + 0, + 156, + 109, + 51, + -54, + -26 + ], + [ + 110, + 156, + 109, + 51, + -54, + -26 + ], + [ + 220, + 156, + 109, + 51, + -54, + -26 + ], + [ + 330, + 156, + 109, + 51, + -54, + -26 + ], + [ + 0, + 208, + 109, + 51, + -54, + -26 + ], + [ + 110, + 208, + 109, + 51, + -54, + -26 + ], + [ + 220, + 208, + 109, + 51, + -54, + -26 + ], + [ + 330, + 208, + 109, + 51, + -54, + -26 + ], + [ + 0, + 260, + 109, + 51, + -54, + -26 + ] + ] + ] +} + +export const REDEMPTION_AURA_META: OverlayMeta = { + "name": "redemption", + "celFile": "Redemption", + "width": 512, + "height": 182, + "directions": 1, + "frames": 12, + "framesPerDirection": 12, + "animRate": 16, + "trans": 3, + "preDraw": true, + "lightRadius": 0, + "lightColor": [ + 255, + 255, + 255 + ], + "box": { + "left": -53, + "top": -27, + "width": 104, + "height": 60 + }, + "groups": [ + [ + [ + 0, + 0, + 104, + 60, + -53, + -27 + ], + [ + 105, + 0, + 104, + 60, + -53, + -27 + ], + [ + 210, + 0, + 104, + 60, + -53, + -27 + ], + [ + 315, + 0, + 104, + 60, + -53, + -27 + ], + [ + 0, + 61, + 104, + 60, + -53, + -27 + ], + [ + 105, + 61, + 104, + 60, + -53, + -27 + ], + [ + 210, + 61, + 104, + 60, + -53, + -27 + ], + [ + 315, + 61, + 104, + 60, + -53, + -27 + ], + [ + 0, + 122, + 104, + 60, + -53, + -27 + ], + [ + 105, + 122, + 104, + 60, + -53, + -27 + ], + [ + 210, + 122, + 104, + 60, + -53, + -27 + ], + [ + 315, + 122, + 104, + 60, + -53, + -27 + ] + ] + ] +} + +export const SALVATION_AURA_META: OverlayMeta = { + "name": "salvation", + "celFile": "AuraResistAllFront", + "width": 512, + "height": 187, + "directions": 1, + "frames": 20, + "framesPerDirection": 20, + "animRate": 16, + "trans": 3, + "preDraw": false, + "lightRadius": 6, + "lightColor": [ + 211, + 148, + 255 + ], + "box": { + "left": -40, + "top": -24, + "width": 78, + "height": 46 + }, + "groups": [ + [ + [ + 0, + 0, + 78, + 46, + -40, + -24 + ], + [ + 79, + 0, + 78, + 46, + -40, + -24 + ], + [ + 158, + 0, + 78, + 46, + -40, + -24 + ], + [ + 237, + 0, + 78, + 46, + -40, + -24 + ], + [ + 316, + 0, + 78, + 46, + -40, + -24 + ], + [ + 395, + 0, + 78, + 46, + -40, + -24 + ], + [ + 0, + 47, + 78, + 46, + -40, + -24 + ], + [ + 79, + 47, + 78, + 46, + -40, + -24 + ], + [ + 158, + 47, + 78, + 46, + -40, + -24 + ], + [ + 237, + 47, + 78, + 46, + -40, + -24 + ], + [ + 316, + 47, + 78, + 46, + -40, + -24 + ], + [ + 395, + 47, + 78, + 46, + -40, + -24 + ], + [ + 0, + 94, + 78, + 46, + -40, + -24 + ], + [ + 79, + 94, + 78, + 46, + -40, + -24 + ], + [ + 158, + 94, + 78, + 46, + -40, + -24 + ], + [ + 237, + 94, + 78, + 46, + -40, + -24 + ], + [ + 316, + 94, + 78, + 46, + -40, + -24 + ], + [ + 395, + 94, + 78, + 46, + -40, + -24 + ], + [ + 0, + 141, + 78, + 46, + -40, + -24 + ], + [ + 79, + 141, + 78, + 46, + -40, + -24 + ] + ] + ] +} + +export const ALL_OVERLAY_NAMES: readonly string[] = [ + "fire_cast_1", + "fire_cast_2", + "ice_cast_1", + "ice_cast_2", + "ice_cast_3", + "light_cast_1", + "light_cast_2", + "teleport", + "might", + "prayer", + "resist_fire", + "holy_fire", + "thorns", + "defiance", + "resist_cold", + "blessed_aim", + "cleansing", + "resist_lightning", + "concentration", + "holy_freeze", + "vigor", + "holy_shock", + "sanctuary", + "meditation", + "fanaticism", + "conviction", + "redemption", + "salvation", +] + +export const OVERLAY_METAS: Readonly> = { + "fire_cast_1": FIRE_CAST_1_META, + "FireCast_for_Sorceress": FIRE_CAST_1_META, + "firecast_for_sorceress": FIRE_CAST_1_META, + "fire_cast_2": FIRE_CAST_2_META, + "FireCast2": FIRE_CAST_2_META, + "firecast2": FIRE_CAST_2_META, + "ice_cast_1": ICE_CAST_1_META, + "IceCastNew01": ICE_CAST_1_META, + "icecastnew01": ICE_CAST_1_META, + "ice_cast_2": ICE_CAST_2_META, + "IceCastNew02": ICE_CAST_2_META, + "icecastnew02": ICE_CAST_2_META, + "ice_cast_3": ICE_CAST_3_META, + "IceCastNew03": ICE_CAST_3_META, + "icecastnew03": ICE_CAST_3_META, + "light_cast_1": LIGHT_CAST_1_META, + "LightningCast": LIGHT_CAST_1_META, + "lightningcast": LIGHT_CAST_1_META, + "light_cast_2": LIGHT_CAST_2_META, + "LightningCastRunesFront": LIGHT_CAST_2_META, + "lightningcastrunesfront": LIGHT_CAST_2_META, + "teleport": TELEPORT_META, + "Teleport": TELEPORT_META, + "might": MIGHT_AURA_META, + "AuraMightFront": MIGHT_AURA_META, + "auramightfront": MIGHT_AURA_META, + "aura_might_front": MIGHT_AURA_META, + "aura_might": MIGHT_AURA_META, + "prayer": PRAYER_AURA_META, + "AuraPrayerFront": PRAYER_AURA_META, + "auraprayerfront": PRAYER_AURA_META, + "aura_prayer_front": PRAYER_AURA_META, + "aura_prayer": PRAYER_AURA_META, + "resist_fire": RESIST_FIRE_AURA_META, + "AuraResistFireFront": RESIST_FIRE_AURA_META, + "auraresistfirefront": RESIST_FIRE_AURA_META, + "aura_resistfire": RESIST_FIRE_AURA_META, + "holy_fire": HOLY_FIRE_AURA_META, + "AuraHolyFireFront": HOLY_FIRE_AURA_META, + "auraholyfirefront": HOLY_FIRE_AURA_META, + "aura_holyfire_front": HOLY_FIRE_AURA_META, + "aura_holyfire": HOLY_FIRE_AURA_META, + "thorns": THORNS_AURA_META, + "AuraThornsFront": THORNS_AURA_META, + "aurathornsfront": THORNS_AURA_META, + "aura_thorns_front": THORNS_AURA_META, + "aura_thorns": THORNS_AURA_META, + "defiance": DEFIANCE_AURA_META, + "AuraDefianceFront": DEFIANCE_AURA_META, + "auradefiancefront": DEFIANCE_AURA_META, + "aura_defiance_front": DEFIANCE_AURA_META, + "aura_defiance": DEFIANCE_AURA_META, + "resist_cold": RESIST_COLD_AURA_META, + "AuraResistColdBack": RESIST_COLD_AURA_META, + "auraresistcoldback": RESIST_COLD_AURA_META, + "aura_resistcold": RESIST_COLD_AURA_META, + "blessed_aim": BLESSED_AIM_AURA_META, + "BlessedAim_front": BLESSED_AIM_AURA_META, + "blessedaim_front": BLESSED_AIM_AURA_META, + "blessedaimfront": BLESSED_AIM_AURA_META, + "blessed_aim_front": BLESSED_AIM_AURA_META, + "cleansing": CLEANSING_AURA_META, + "Cleansing_front": CLEANSING_AURA_META, + "cleansing_front": CLEANSING_AURA_META, + "cleansingfront": CLEANSING_AURA_META, + "resist_lightning": RESIST_LIGHTNING_AURA_META, + "AuraResistLightningBack": RESIST_LIGHTNING_AURA_META, + "auraresistlightningback": RESIST_LIGHTNING_AURA_META, + "aura_resistlight": RESIST_LIGHTNING_AURA_META, + "concentration": CONCENTRATION_AURA_META, + "Concentration_front": CONCENTRATION_AURA_META, + "concentration_front": CONCENTRATION_AURA_META, + "concentrationfront": CONCENTRATION_AURA_META, + "holy_freeze": HOLY_FREEZE_AURA_META, + "HolyFreeze": HOLY_FREEZE_AURA_META, + "holyfreeze": HOLY_FREEZE_AURA_META, + "holywind": HOLY_FREEZE_AURA_META, + "vigor": VIGOR_AURA_META, + "Stamina_front": VIGOR_AURA_META, + "stamina_front": VIGOR_AURA_META, + "staminafront": VIGOR_AURA_META, + "stamina": VIGOR_AURA_META, + "holy_shock": HOLY_SHOCK_AURA_META, + "HolyShock_front": HOLY_SHOCK_AURA_META, + "holyshock_front": HOLY_SHOCK_AURA_META, + "holyshockfront": HOLY_SHOCK_AURA_META, + "holyshock": HOLY_SHOCK_AURA_META, + "sanctuary": SANCTUARY_AURA_META, + "SanctuaryAura_Front": SANCTUARY_AURA_META, + "sanctuaryaura_front": SANCTUARY_AURA_META, + "sanctuaryfront": SANCTUARY_AURA_META, + "sanctuary_front": SANCTUARY_AURA_META, + "meditation": MEDITATION_AURA_META, + "Meditation": MEDITATION_AURA_META, + "meditationfront": MEDITATION_AURA_META, + "fanaticism": FANATICISM_AURA_META, + "Fanatacism_Back": FANATICISM_AURA_META, + "fanatacism_back": FANATICISM_AURA_META, + "fanaticismback": FANATICISM_AURA_META, + "aura_fanatic": FANATICISM_AURA_META, + "Fanatacism_Front": FANATICISM_AURA_META, + "fanatacism_front": FANATICISM_AURA_META, + "conviction": CONVICTION_AURA_META, + "Conviction": CONVICTION_AURA_META, + "convictionback": CONVICTION_AURA_META, + "redemption": REDEMPTION_AURA_META, + "Redemption": REDEMPTION_AURA_META, + "redemptionback": REDEMPTION_AURA_META, + "salvation": SALVATION_AURA_META, + "AuraResistAllFront": SALVATION_AURA_META, + "auraresistallfront": SALVATION_AURA_META, + "aura_resistall_front": SALVATION_AURA_META, + "aura_resistall": SALVATION_AURA_META, } diff --git a/src/scene/act-scene.ts b/src/scene/act-scene.ts index ea8e17f..bcce18a 100644 --- a/src/scene/act-scene.ts +++ b/src/scene/act-scene.ts @@ -45,7 +45,7 @@ import { getEmbeddedDropTables } from '../game/embedded-drop-tables.ts' import { buildNpcDef, hasPackedSprite } from '../game/npc.ts' import { npcDialog } from '../game/quests.ts' import type { NpcDef } from '../game/quests.ts' -import { BATCH1_SKILLS, getBatch1SkillDef, isBatch1Skill, getSkillManaCost, getMissileTxtData, ISO_GROUND_ASPECT_RATIO, getSkillCastOverlay } from '../game/skills.ts' +import { BATCH1_SKILLS, getBatch1SkillDef, isBatch1Skill, getSkillManaCost, getMissileTxtData, ISO_GROUND_ASPECT_RATIO, getSkillCastOverlay, isAuraSkill } from '../game/skills.ts' import type { Projectile, ActiveOverlay } from '../game/skills.ts' import { findSafeDropPosition, calculateBounceHeight, triggerFlippyBounce, type GroundItemEntity } from '../game/ground-items.ts' import { @@ -63,7 +63,7 @@ import { RoofFadeController } from '../render/roofs.ts' import { facingToDirection } from '../game/character.ts' import type { LoadedMonsterArt } from '../game/monster-art.ts' import { velocityToDccDirection, MISSILE_METAS, type MissileMeta, type MissileFrameTuple } from '../render/missiles-meta.ts' -import type { OverlayMeta } from '../render/overlays-meta.ts' +import { OVERLAY_METAS, type OverlayMeta } from '../render/overlays-meta.ts' import { ActorAnimator, type AnimClipMeta } from '../game/actor-animator.ts' import { resolveMonsterArtSpec } from '../game/monster-mapping.ts' import { ACT_NAMES_ZH, LEVEL_NAMES_ZH, getLevelNames, sceneNameZh, variantLabelZh } from '../game/level-names-zh.ts' @@ -1960,7 +1960,7 @@ export class SceneMouseController { this.navTarget = { x: worldX, y: worldY } } else if (this.isRightMouseDown) { const rightSkillId = this.hudManager ? this.hudManager.hotkeys.rightSkillId : 64 - if (isPassiveSkill(rightSkillId) || (rightSkillId === 0 && !this.input.shiftHeld && this.activeClickType === 'ground')) { + if (isPassiveSkill(rightSkillId) || isAuraSkill(rightSkillId) || (rightSkillId === 0 && !this.input.shiftHeld && this.activeClickType === 'ground')) { const { x: worldX, y: worldY } = this.getPointerWorldCoords(e.clientX, e.clientY) this.navTarget = { x: worldX, y: worldY } } @@ -1982,8 +1982,8 @@ export class SceneMouseController { handleRightClickWorld(worldX: number, worldY: number): void { const rightSkillId = this.hudManager ? this.hudManager.hotkeys.rightSkillId : 64 - if (isPassiveSkill(rightSkillId)) { - // Walk/Run fallback + if (isPassiveSkill(rightSkillId) || isAuraSkill(rightSkillId)) { + // Walk/Run fallback (auras are active automatically in D2 1.13c) this.pendingInteraction = null this.navTarget = { x: worldX, y: worldY } this.lastDist = Math.hypot(worldX - this.engine.world.player.x, worldY - this.engine.world.player.y) @@ -2267,7 +2267,7 @@ export class SceneMouseController { } } else if (this.isRightMouseDown && this.lastClientPos !== null) { const rightSkillId = this.hudManager ? this.hudManager.hotkeys.rightSkillId : 64 - if (isPassiveSkill(rightSkillId)) { + if (isPassiveSkill(rightSkillId) || isAuraSkill(rightSkillId)) { const { x: worldX, y: worldY } = this.getPointerWorldCoords(this.lastClientPos.x, this.lastClientPos.y) this.navTarget = { x: worldX, y: worldY } } else if (rightSkillId === 0 && !this.input.shiftHeld && this.activeClickType === 'ground') { @@ -3766,16 +3766,7 @@ export async function loadOverlayArtMap( ): Promise> { const map = new Map() if (typeof fetch === 'undefined' || typeof createImageBitmap === 'undefined') return map - const targets = [ - 'fire_cast_1', - 'fire_cast_2', - 'ice_cast_1', - 'ice_cast_2', - 'ice_cast_3', - 'light_cast_1', - 'light_cast_2', - 'teleport', - ] + const targets = Array.from(new Set(Object.values(OVERLAY_METAS).map(m => m.name))) const baseCandidates = [ '/overlays', packBase ? `${packBase}/overlays` : '', @@ -3823,6 +3814,12 @@ export async function loadOverlayArtMap( } }), ) + for (const [alias, meta] of Object.entries(OVERLAY_METAS)) { + const art = map.get(meta.name) + if (art && !map.has(alias)) { + map.set(alias, art) + } + } return map } @@ -4261,6 +4258,8 @@ async function runScene(initialRuntime: MapRuntime, renderer: SpriteRenderer, st }), { spawn: runtime.spawn, + isTown: [1, 40, 75, 103, 109].includes(runtime.levelId), + levelId: runtime.levelId, // The scene plans its own population; there is no synthetic roster to fall // back on, so the engine's frame-0 spawner has nothing to draw from. stats: [], @@ -4583,7 +4582,10 @@ if (typeof window !== 'undefined') { state.animSpeed = next.animSpeed state.frameDurationMs = next.frameDurationMs - const names = getLevelNames(next.levelId ?? next.level) + const effectiveLvlId = next.levelId ?? next.level ?? 1 + engine.levelId = effectiveLvlId + engine.isTown = [1, 40, 75, 103, 109].includes(effectiveLvlId) + const names = getLevelNames(effectiveLvlId) hudManager?.worldPanels.showAreaBanner(names.nameZh, names.nameEn) if (hudManager) { hudManager.worldPanels.setCurrentLevel(next.levelId ?? null) @@ -4845,6 +4847,11 @@ if (typeof window !== 'undefined') { onTick: () => { const mouseStep = mouseController.tick() const effectiveMovement = mouseStep.movement + if (hudManager) { + const rightSkillId = hudManager.hotkeys.rightSkillId + const slvl = Math.max(1, hudManager.skillTree ? hudManager.skillTree.getEffectiveLevel(rightSkillId) : 20) + engine.updateActiveAura(rightSkillId, slvl) + } engine.tick({ movement: effectiveMovement, attacking: input.attacking, @@ -5154,7 +5161,11 @@ if (typeof window !== 'undefined') { const drawY = frame.anchorY !== undefined ? monster.y + frame.anchorY : monster.y - frame.height + FEET_HEIGHT / 2 - renderer.draw(frame, drawX, drawY, { atlas: art.handle }) + const isChilled = monster.chillTicks !== undefined && monster.chillTicks > 0 + renderer.draw(frame, drawX, drawY, { + atlas: art.handle, + ...(isChilled ? { tint: [0.4, 0.65, 1.0, 1.0] as const, paletteRow: 1 } : {}), + }) return } } @@ -5164,7 +5175,9 @@ if (typeof window !== 'undefined') { state.missingMonsterArt.push(missingId) console.error(`monster art missing at draw time: ${missingId} (drawn as a red box)`) } - renderer.drawSolid(monster.x - MARKER_WIDTH / 2, monster.y - MARKER_HEIGHT, MARKER_WIDTH, MARKER_HEIGHT, [0.9, 0.2, 0.2, 1]) + const isChilled = monster.chillTicks !== undefined && monster.chillTicks > 0 + const tint = isChilled ? ([0.4, 0.65, 1.0, 1.0] as const) : ([0.9, 0.2, 0.2, 1.0] as const) + renderer.drawSolid(monster.x - MARKER_WIDTH / 2, monster.y - MARKER_HEIGHT, MARKER_WIDTH, MARKER_HEIGHT, tint) } }) } diff --git a/tests/skills/aura-target-parity.test.ts b/tests/skills/aura-target-parity.test.ts new file mode 100644 index 0000000..5ca8375 --- /dev/null +++ b/tests/skills/aura-target-parity.test.ts @@ -0,0 +1,470 @@ +/** + * Diablo II: Lord of Destruction v1.13c — Aura Target & Visual Parity Test Suite + * + * Ground Truth Invariants (Issue #397): + * 1. Town vs Wilderness Filtering: + * - Friendly auras (Defiance #104, Might #98, Prayer #99, etc.) buff ONLY self in town. + * - In wilderness, they broadcast to self, player mercenary, party members, party mercenaries, and summons. + * 2. Conviction Asymmetry: + * - Caster receives ground ring visual only (convictionback), ZERO resistance or defense reduction on self! + * - In wilderness, hostile enemies in range receive -Def% and -Res% debuffs AND display convictionback ring under feet. + * - In town, enemy debuffs and enemy ground rings are completely suspended. + * 3. Holy Freeze Parity: + * - Caster displays cyan frost ground ring (holyfreeze). + * - In wilderness, hostile enemies in range receive cold pulse damage, slow (item_slow), and blue chill tint (chillTicks). + * - Authentic D2 Invariant: Holy Freeze NEVER displays an aura ring under enemy feet! + * - In town, enemy damage pulses and slow are completely suspended. + * 4. Complete Paladin Aura Coverage: + * - All 20 Paladin auras are recognized by isAuraSkill() and mapped to canonical 1.13c overlays. + * - Activating an aura spawns a looping player overlay that follows the player and wraps animation frames. + * - Deactivating/switching an aura cleanly disposes old aura overlays and enemy conviction rings. + * 5. Spell Cast Overlay Immunity: + * - Transient spell cast overlays (e.g. Fire Bolt, Teleport) do NOT expire or interrupt active aura overlays. + */ +import { describe, expect, it } from 'vitest' +import { getSharedDataRegistry } from '../../src/game/engine/data-registry.ts' +import { WorldArena } from '../../src/game/engine/world-arena.ts' +import { AuraScanner } from '../../src/game/engine/aura-scanner.ts' +import { UnitStatList } from '../../src/game/engine/stat-list.ts' +import { StateBus } from '../../src/game/engine/state-bus.ts' +import type { CombatUnitContext } from '../../src/game/engine/combat-pipeline.ts' +import { GameEngine } from '../../src/game/engine.ts' +import { DEMO_EXPERIENCE, DEMO_SKILLS, DEMO_QUESTS } from '../../src/game/demo-data.ts' +import { + PALADIN_AURA_OVERLAYS, + PALADIN_AURA_SKILL_IDS, + isAuraSkill, + getAuraOverlayName, +} from '../../src/game/skills.ts' + +function createMockTerrain() { + return { + widthPx: 2000, + heightPx: 2000, + overlap: () => 0, + } +} + +const DEFAULT_COMBAT_OPTIONS = { + playerSpeed: 100, + playerReach: 40, + playerCooldownTicks: 12, + playerDamage: 5, + playerManaPerAttack: 1, + respawnTicks: 50, + disableMonsterAggro: false, +} + +const DEFAULT_ENGINE_OPTIONS = { + talkRadius: 50, + pickupRadius: 30, + inventoryCols: 10, + inventoryRows: 4, +} + +function makeMonsterStats(id: string, hp = 50) { + return { + id, + name: id, + hp, + damage: 2, + cooldownTicks: 25, + reach: 40, + aggroRadius: 200, + speed: 60, + xp: 10, + } +} + +describe('Issue #397 — Diablo II v1.13c Aura Target & Visual Parity', () => { + it('1. Verifies all 20 Paladin auras are mapped to authentic 1.13c overlays', () => { + expect(PALADIN_AURA_SKILL_IDS.size).toBe(20) + for (const skillId of PALADIN_AURA_SKILL_IDS) { + expect(isAuraSkill(skillId)).toBe(true) + const overlay = getAuraOverlayName(skillId) + expect(overlay).toBeDefined() + expect(typeof overlay).toBe('string') + expect(overlay!.length).toBeGreaterThan(0) + } + + // Verify canonical names + expect(getAuraOverlayName(98)).toBe('might') + expect(getAuraOverlayName(99)).toBe('prayer') + expect(getAuraOverlayName(100)).toBe('resist_fire') + expect(getAuraOverlayName(102)).toBe('holy_fire') + expect(getAuraOverlayName(103)).toBe('thorns') + expect(getAuraOverlayName(104)).toBe('defiance') + expect(getAuraOverlayName(105)).toBe('resist_cold') + expect(getAuraOverlayName(108)).toBe('blessed_aim') + expect(getAuraOverlayName(109)).toBe('cleansing') + expect(getAuraOverlayName(110)).toBe('resist_lightning') + expect(getAuraOverlayName(113)).toBe('concentration') + expect(getAuraOverlayName(114)).toBe('holy_freeze') + expect(getAuraOverlayName(115)).toBe('vigor') + expect(getAuraOverlayName(118)).toBe('holy_shock') + expect(getAuraOverlayName(119)).toBe('sanctuary') + expect(getAuraOverlayName(120)).toBe('meditation') + expect(getAuraOverlayName(122)).toBe('fanaticism') + expect(getAuraOverlayName(123)).toBe('conviction') + expect(getAuraOverlayName(124)).toBe('redemption') + expect(getAuraOverlayName(125)).toBe('salvation') + }) + + it('2. Defiance (#104): Only buffs self in town; broadcasts to allies/mercs/summons in wilderness', async () => { + const registry = await getSharedDataRegistry() + + // --- Scenario A: In Town (isTown: true) --- + const townArena = new WorldArena({ + registry, + classCode: 'pal', + skillId: 104, + slvl: 20, + isTown: true, + }) + const mercInTown = townArena.addDummyAlly('mercenary', 'Desert Mercenary') + const summonInTown = townArena.addDummyAlly('minion', 'Clay Golem') + const partyInTown = townArena.addDummyAlly('party', 'Sorceress Ally') + + townArena.triggerCast() + townArena.stepTicks(15) + + // Player MUST receive defiance aura state and armor bonus + expect(townArena.player.stateBus.hasState('defiance')).toBe(true) + expect(townArena.player.statList.getAccruedStat('skill_armor_percent')).toBeGreaterThan(0) + + // Allies in town must NOT receive defiance state or stat bonus! + expect(mercInTown.stateBus.hasState('defiance')).toBe(false) + expect(summonInTown.stateBus.hasState('defiance')).toBe(false) + expect(partyInTown.stateBus.hasState('defiance')).toBe(false) + expect(mercInTown.statList.getAccruedStat('skill_armor_percent')).toBe(0) + expect(summonInTown.statList.getAccruedStat('skill_armor_percent')).toBe(0) + expect(partyInTown.statList.getAccruedStat('skill_armor_percent')).toBe(0) + + // --- Scenario B: In Wilderness (isTown: false) --- + const wildArena = new WorldArena({ + registry, + classCode: 'pal', + skillId: 104, + slvl: 20, + isTown: false, + }) + const mercWild = wildArena.addDummyAlly('mercenary', 'Desert Mercenary') + const summonWild = wildArena.addDummyAlly('minion', 'Clay Golem') + const partyWild = wildArena.addDummyAlly('party', 'Sorceress Ally') + + wildArena.triggerCast() + wildArena.stepTicks(15) + + // Player and ALL allies in wilderness receive defiance aura state! + expect(wildArena.player.stateBus.hasState('defiance')).toBe(true) + expect(mercWild.stateBus.hasState('defiance')).toBe(true) + expect(summonWild.stateBus.hasState('defiance')).toBe(true) + expect(partyWild.stateBus.hasState('defiance')).toBe(true) + + // Stat bonuses propagated + expect(mercWild.statList.getAccruedStat('skill_armor_percent')).toBeGreaterThan(0) + expect(summonWild.statList.getAccruedStat('skill_armor_percent')).toBeGreaterThan(0) + expect(partyWild.statList.getAccruedStat('skill_armor_percent')).toBeGreaterThan(0) + }) + + it('3. Conviction (#123) Asymmetry: Caster has ground ring visual only with 0 debuffs; wilderness enemies get debuffs and foot rings', async () => { + const registry = await getSharedDataRegistry() + + // --- Arena verification for stat asymmetry --- + const wildArena = new WorldArena({ + registry, + classCode: 'pal', + skillId: 123, + slvl: 20, + isTown: false, + }) + + const initialPlayerDef = wildArena.player.statList.getAccruedStat('armorclass') + const initialTargetDef = wildArena.targets[0]!.statList.getAccruedStat('armorclass') + + wildArena.triggerCast() + wildArena.stepTicks(15) + + // Caster has conviction state for visual overlay... + expect(wildArena.player.stateBus.hasState('conviction')).toBe(true) + // BUT ZERO defense or resistance penalty on caster! + expect(wildArena.player.statList.getAccruedStat('item_armor_percent')).toBe(0) + expect(wildArena.player.statList.getAccruedStat('armorclass')).toBe(initialPlayerDef) + + // Enemy in wilderness receives defense penalty and pierce debuff + expect(wildArena.targets[0]!.stateBus.hasState('conviction')).toBe(true) + expect(wildArena.targets[0]!.statList.getAccruedStat('item_armor_percent')).toBeLessThan(0) + expect(wildArena.targets[0]!.statList.getAccruedStat('armorclass')).toBeLessThan(initialTargetDef) + + // --- GameEngine verification for visual overlays --- + const engineWild = new GameEngine(createMockTerrain(), { + ...DEFAULT_ENGINE_OPTIONS, + spawn: { x: 500, y: 500 }, + isTown: false, + levelId: 2, // Blood Moor (wilderness) + stats: [makeMonsterStats('zombie', 50)], + monsterCount: 3, + monsterSpread: 100, // close to player + combatOptions: DEFAULT_COMBAT_OPTIONS, + xpTable: DEMO_EXPERIENCE, + skills: DEMO_SKILLS, + npcDefs: [], + questDefs: DEMO_QUESTS, + }) + + // Activate Conviction on player + engineWild.updateActiveAura(123, 20) + expect(engineWild.activeAuraSkillId).toBe(123) + expect(engineWild.activeAuraOverlay).toBeDefined() + expect(engineWild.activeAuraOverlay!.overlayName).toBe('convictionback') + expect(engineWild.activeAuraOverlay!.loop).toBe(true) + + // Step engine ticks to allow conviction aura to acquire monsters + engineWild.tick({ + movement: { x: 0, y: 0 }, + attacking: false, + pickingUp: false, + talking: false, + digits: [], + saving: false, + loading: false, + }) + + // Alive monsters in range MUST have convictionback foot ring + const monsterRings = engineWild.overlays.filter( + ov => ov.isAura && ov.auraSkillId === 123 && ov.targetMonsterIndex !== undefined && !ov.expired, + ) + expect(monsterRings.length).toBeGreaterThan(0) + expect(monsterRings[0]!.overlayName).toBe('convictionback') + expect(monsterRings[0]!.loop).toBe(true) + + // --- In Town: Verify enemy debuffs & overlays are completely suspended --- + const engineTown = new GameEngine(createMockTerrain(), { + ...DEFAULT_ENGINE_OPTIONS, + spawn: { x: 500, y: 500 }, + isTown: true, + levelId: 1, // Rogue Encampment (town) + stats: [makeMonsterStats('zombie', 50)], + monsterCount: 3, + monsterSpread: 100, + combatOptions: DEFAULT_COMBAT_OPTIONS, + xpTable: DEMO_EXPERIENCE, + skills: DEMO_SKILLS, + npcDefs: [], + questDefs: DEMO_QUESTS, + }) + + engineTown.updateActiveAura(123, 20) + engineTown.tick({ + movement: { x: 0, y: 0 }, + attacking: false, + pickingUp: false, + talking: false, + digits: [], + saving: false, + loading: false, + }) + + // In town, caster has aura ring, but NO monsters receive conviction foot rings + const townMonsterRings = engineTown.overlays.filter( + ov => ov.isAura && ov.auraSkillId === 123 && ov.targetMonsterIndex !== undefined && !ov.expired, + ) + expect(townMonsterRings.length).toBe(0) + }) + + it('4. Holy Freeze (#114) Parity: Caster has cyan ring, enemies get cold damage & chill, but NEVER an enemy foot ring', async () => { + const engineWild = new GameEngine(createMockTerrain(), { + ...DEFAULT_ENGINE_OPTIONS, + spawn: { x: 500, y: 500 }, + isTown: false, + levelId: 2, + stats: [makeMonsterStats('fallenshaman', 60)], + monsterCount: 2, + monsterSpread: 80, + combatOptions: DEFAULT_COMBAT_OPTIONS, + xpTable: DEMO_EXPERIENCE, + skills: DEMO_SKILLS, + npcDefs: [], + questDefs: DEMO_QUESTS, + }) + + engineWild.updateActiveAura(114, 20) + expect(engineWild.activeAuraSkillId).toBe(114) + expect(engineWild.activeAuraOverlay!.overlayName).toBe('holyfreeze') + expect(engineWild.activeAuraOverlay!.loop).toBe(true) + + const initialHp = engineWild.world.monsters[0]!.hp + + // Step 50 ticks to trigger a pulse + for (let t = 0; t < 50; t++) { + engineWild.tick({ + movement: { x: 0, y: 0 }, + attacking: false, + pickingUp: false, + talking: false, + digits: [], + saving: false, + loading: false, + }) + } + + // Monster must have taken cold damage and have chillTicks > 0 + expect(engineWild.world.monsters[0]!.hp).toBeLessThan(initialHp) + expect(engineWild.world.monsters[0]!.chillTicks).toBeGreaterThan(0) + + // Invariant: ZERO overlays on the monster! Holy Freeze does not spawn enemy foot rings + const monsterOverlays = engineWild.overlays.filter( + ov => ov.targetMonsterIndex !== undefined && !ov.expired, + ) + expect(monsterOverlays.length).toBe(0) + }) + + it('5. Overlay lifecycle: Looping overlays wrap frames, follow player, and survive transient spell casts', () => { + const engine = new GameEngine(createMockTerrain(), { + ...DEFAULT_ENGINE_OPTIONS, + spawn: { x: 300, y: 300 }, + isTown: false, + stats: [], + monsterCount: 0, + combatOptions: DEFAULT_COMBAT_OPTIONS, + xpTable: DEMO_EXPERIENCE, + skills: DEMO_SKILLS, + npcDefs: [], + questDefs: DEMO_QUESTS, + }) + + // Activate Defiance aura (#104) + engine.updateActiveAura(104, 20) + expect(engine.overlays.length).toBe(1) + const auraOv = engine.overlays[0]! + expect(auraOv.isAura).toBe(true) + expect(auraOv.loop).toBe(true) + + // Simulate 100 ticks (animation frames should wrap without expiring) + for (let i = 0; i < 100; i++) { + engine.tick({ + movement: { x: 1, y: 0 }, // Player moving + attacking: false, + pickingUp: false, + talking: false, + digits: [], + saving: false, + loading: false, + }) + } + + expect(auraOv.expired).toBe(false) + expect(auraOv.x).toBe(engine.world.player.x) + expect(auraOv.y).toBe(engine.world.player.y) + + // Spawn a transient spell cast overlay (e.g. Fire Bolt cast overlay) + const castOv = engine.spawnOverlay('fire_cast_1', { x: engine.world.player.x, y: engine.world.player.y }, 'player') + expect(castOv).toBeDefined() + expect(castOv.isAura).toBeFalsy() + + // The active aura overlay MUST NOT be expired by the spell cast! + expect(auraOv.expired).toBe(false) + expect(engine.overlays).toContain(auraOv) + expect(engine.overlays).toContain(castOv) + + // Switching aura to Fanaticism (#122) cleanly replaces the aura overlay + engine.updateActiveAura(122, 20) + expect(auraOv.expired).toBe(true) + expect(engine.activeAuraSkillId).toBe(122) + expect(engine.activeAuraOverlay!.overlayName).toBe('fanaticismback') + + // Deactivating aura completely clears the aura overlay + engine.updateActiveAura(null) + expect(engine.activeAuraSkillId).toBeNull() + expect(engine.activeAuraOverlay).toBeNull() + expect(engine.overlays.filter(ov => ov.isAura && !ov.expired).length).toBe(0) + }) + + it('6. Redemption (#124): Redeems corpses in wilderness, suspended in town', () => { + // --- Wilderness --- + const engineWild = new GameEngine(createMockTerrain(), { + ...DEFAULT_ENGINE_OPTIONS, + spawn: { x: 500, y: 500 }, + isTown: false, + levelId: 2, + stats: [makeMonsterStats('zombie', 20)], + monsterCount: 1, + monsterSpread: 20, + combatOptions: DEFAULT_COMBAT_OPTIONS, + xpTable: DEMO_EXPERIENCE, + skills: DEMO_SKILLS, + npcDefs: [], + questDefs: DEMO_QUESTS, + }) + + // Kill monster to create a fresh corpse + const mon = engineWild.world.monsters[0]! + mon.state = 'dead' + mon.corpseTicks = 100 + + // Set player health/mana lower to verify healing + engineWild.world.player.hp = 100 + engineWild.world.player.maxHp = 500 + engineWild.world.player.mana = 100 + engineWild.world.player.maxMana = 500 + + engineWild.updateActiveAura(124, 20) + + // Step 50 ticks to trigger pulse + for (let t = 0; t < 50; t++) { + engineWild.tick({ + movement: { x: 0, y: 0 }, + attacking: false, + pickingUp: false, + talking: false, + digits: [], + saving: false, + loading: false, + }) + } + + // Corpse consumed, player restored + expect(mon.corpseTicks).toBe(0) + expect(engineWild.world.player.hp).toBeGreaterThan(100) + expect(engineWild.world.player.mana).toBeGreaterThan(100) + + // --- Town --- + const engineTown = new GameEngine(createMockTerrain(), { + ...DEFAULT_ENGINE_OPTIONS, + spawn: { x: 500, y: 500 }, + isTown: true, + levelId: 1, + stats: [makeMonsterStats('zombie', 20)], + monsterCount: 1, + monsterSpread: 20, + combatOptions: DEFAULT_COMBAT_OPTIONS, + xpTable: DEMO_EXPERIENCE, + skills: DEMO_SKILLS, + npcDefs: [], + questDefs: DEMO_QUESTS, + }) + + const townMon = engineTown.world.monsters[0]! + townMon.state = 'dead' + townMon.corpseTicks = 100 + engineTown.world.player.hp = 100 + engineTown.world.player.maxHp = 500 + + engineTown.updateActiveAura(124, 20) + for (let t = 0; t < 50; t++) { + engineTown.tick({ + movement: { x: 0, y: 0 }, + attacking: false, + pickingUp: false, + talking: false, + digits: [], + saving: false, + loading: false, + }) + } + + // In town, corpse consumption is suspended (corpse natural decay is 1/tick so 100 - 50 = 50, not consumed to 0) + expect(townMon.corpseTicks).toBe(50) + expect(engineTown.world.player.hp).toBe(100) + }) +})