diff --git a/assets/gamedata/peggle/level-002.json b/assets/gamedata/peggle/level-002.json index b1a9c52..0bf72d2 100644 --- a/assets/gamedata/peggle/level-002.json +++ b/assets/gamedata/peggle/level-002.json @@ -7,359 +7,289 @@ "orangeCount": 25, "greenCount": 2, "pegs": [ - { - "x": 405, - "y": 430, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 383, - "y": 491, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 326, - "y": 524, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 263, - "y": 512, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 221, - "y": 462, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 221, - "y": 398, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 262, - "y": 348, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 326, - "y": 336, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 383, - "y": 369, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, { "x": 985, - "y": 430, + "y": 359, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 963, - "y": 491, + "x": 930, + "y": 416, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 906, - "y": 524, + "x": 865, + "y": 464, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 843, - "y": 512, + "x": 795, + "y": 501, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 801, - "y": 462, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 801, - "y": 398, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 843, - "y": 348, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 906, - "y": 336, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 963, - "y": 369, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 480, - "y": 390, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 560, - "y": 390, + "x": 719, + "y": 526, "shape": "circle", "r": 16, "orangeEligible": true }, { "x": 640, - "y": 390, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 720, - "y": 390, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 480, - "y": 470, + "y": 538, "shape": "circle", "r": 16, "orangeEligible": true }, { "x": 560, - "y": 470, + "y": 538, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 640, - "y": 470, + "x": 481, + "y": 526, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 720, - "y": 470, + "x": 405, + "y": 501, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 515, - "y": 430, + "x": 335, + "y": 464, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 270, + "y": 416, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 215, + "y": 359, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 236, + "y": 598, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 290, + "y": 548, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 352, + "y": 506, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 490, + "y": 452, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 563, + "y": 441, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 637, + "y": 441, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 710, + "y": 452, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 848, + "y": 506, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 910, + "y": 548, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 964, + "y": 598, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 782, + "y": 575, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 705, + "y": 652, "shape": "circle", "r": 16, "orangeEligible": true }, { "x": 600, - "y": 430, + "y": 680, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 685, - "y": 430, + "x": 495, + "y": 652, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 770, - "y": 430, + "x": 418, + "y": 575, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 220, - "y": 240, + "x": 418, + "y": 365, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 495, + "y": 288, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 705, + "y": 288, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 782, + "y": 365, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 150, + "y": 480, "shape": "circle", "r": 16, "orangeEligible": false }, { - "x": 372, - "y": 240, + "x": 240, + "y": 480, "shape": "circle", "r": 16, "orangeEligible": false }, { - "x": 524, - "y": 240, + "x": 960, + "y": 480, "shape": "circle", "r": 16, "orangeEligible": false }, { - "x": 676, - "y": 240, + "x": 1050, + "y": 480, "shape": "circle", "r": 16, "orangeEligible": false }, { - "x": 828, - "y": 240, + "x": 380, + "y": 740, "shape": "circle", "r": 16, "orangeEligible": false }, { - "x": 980, - "y": 240, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 300, - "y": 620, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 450, - "y": 620, + "x": 490, + "y": 740, "shape": "circle", "r": 16, "orangeEligible": false }, { "x": 600, - "y": 620, + "y": 740, "shape": "circle", "r": 16, "orangeEligible": false }, { - "x": 750, - "y": 620, + "x": 710, + "y": 740, "shape": "circle", "r": 16, "orangeEligible": false }, { - "x": 900, - "y": 620, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 300, - "y": 710, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 450, - "y": 710, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 600, - "y": 710, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 750, - "y": 710, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 900, - "y": 710, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 140, - "y": 320, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 180, - "y": 440, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 220, - "y": 560, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 1060, - "y": 320, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 980, - "y": 560, + "x": 820, + "y": 740, "shape": "circle", "r": 16, "orangeEligible": false diff --git a/assets/gamedata/peggle/level-003.json b/assets/gamedata/peggle/level-003.json index c901d00..ef02ac0 100644 --- a/assets/gamedata/peggle/level-003.json +++ b/assets/gamedata/peggle/level-003.json @@ -8,323 +8,344 @@ "greenCount": 2, "pegs": [ { - "x": 600, - "y": 250, + "x": 933, + "y": 238, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 619, - "y": 309, + "x": 900, + "y": 311, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 639, - "y": 369, + "x": 851, + "y": 374, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 658, - "y": 428, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 677, - "y": 488, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 697, - "y": 547, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 716, - "y": 607, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 735, - "y": 666, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 685, - "y": 629, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 634, - "y": 593, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 584, - "y": 556, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 533, - "y": 519, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 482, - "y": 482, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 432, - "y": 446, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 381, - "y": 409, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 444, - "y": 409, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 506, - "y": 409, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 569, - "y": 409, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 694, - "y": 409, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 756, - "y": 409, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 819, - "y": 409, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 768, - "y": 446, + "x": 789, + "y": 424, "shape": "circle", "r": 16, "orangeEligible": true }, { "x": 718, - "y": 482, + "y": 460, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 566, - "y": 593, + "x": 640, + "y": 478, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 515, - "y": 629, + "x": 560, + "y": 478, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 465, - "y": 666, + "x": 482, + "y": 460, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 484, - "y": 607, + "x": 411, + "y": 424, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 503, - "y": 547, + "x": 349, + "y": 374, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 561, - "y": 369, + "x": 300, + "y": 311, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 581, - "y": 309, + "x": 267, + "y": 238, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 972, - "y": 577, + "x": 1025, + "y": 330, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 942, - "y": 638, + "x": 980, + "y": 406, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 901, - "y": 693, + "x": 922, + "y": 473, "shape": "circle", "r": 16, "orangeEligible": true }, { "x": 852, - "y": 740, + "y": 527, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 796, - "y": 779, + "x": 773, + "y": 567, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 404, - "y": 779, + "x": 688, + "y": 592, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 512, + "y": 592, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 427, + "y": 567, "shape": "circle", "r": 16, "orangeEligible": true }, { "x": 348, - "y": 740, + "y": 527, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 299, - "y": 693, + "x": 278, + "y": 473, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 258, - "y": 638, + "x": 220, + "y": 406, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 228, - "y": 577, + "x": 175, + "y": 330, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 240, - "y": 240, + "x": 1098, + "y": 446, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1044, + "y": 519, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 978, + "y": 583, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 904, + "y": 636, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 822, + "y": 676, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 736, + "y": 704, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 646, + "y": 718, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 554, + "y": 718, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 464, + "y": 704, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 378, + "y": 676, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 296, + "y": 636, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 222, + "y": 583, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 156, + "y": 519, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 102, + "y": 446, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 180, + "y": 260, "shape": "circle", "r": 16, "orangeEligible": false }, { - "x": 350, - "y": 240, + "x": 180, + "y": 460, "shape": "circle", "r": 16, "orangeEligible": false }, { - "x": 460, - "y": 240, + "x": 180, + "y": 560, "shape": "circle", "r": 16, "orangeEligible": false }, { - "x": 740, - "y": 240, + "x": 1020, + "y": 260, "shape": "circle", "r": 16, "orangeEligible": false }, { - "x": 850, - "y": 240, + "x": 1020, + "y": 460, "shape": "circle", "r": 16, "orangeEligible": false }, { - "x": 960, - "y": 240, + "x": 1020, + "y": 560, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 420, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 540, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 660, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 780, + "y": 760, "shape": "circle", "r": 16, "orangeEligible": false diff --git a/assets/gamedata/peggle/level-004.json b/assets/gamedata/peggle/level-004.json index 832e4ee..48efa63 100644 --- a/assets/gamedata/peggle/level-004.json +++ b/assets/gamedata/peggle/level-004.json @@ -8,459 +8,263 @@ "greenCount": 2, "pegs": [ { - "x": 690, - "y": 470, + "x": 538, + "y": 200, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 664, - "y": 534, + "x": 558, + "y": 266, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 600, - "y": 560, + "x": 558, + "y": 334, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 536, - "y": 534, + "x": 538, + "y": 400, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 510, - "y": 470, + "x": 501, + "y": 457, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 536, - "y": 406, + "x": 450, + "y": 502, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 600, - "y": 380, + "x": 388, + "y": 530, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 664, - "y": 406, + "x": 320, + "y": 540, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 775, - "y": 470, + "x": 812, + "y": 790, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 758, - "y": 546, + "x": 750, + "y": 762, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 709, - "y": 607, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 639, - "y": 641, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 561, - "y": 641, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 491, - "y": 607, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 442, - "y": 546, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 425, - "y": 470, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 442, - "y": 394, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 491, - "y": 333, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 561, - "y": 299, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 639, - "y": 299, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 709, - "y": 333, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 758, - "y": 394, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 860, - "y": 470, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 847, - "y": 550, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 810, - "y": 623, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 753, - "y": 680, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 680, + "x": 699, "y": 717, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 600, - "y": 730, + "x": 662, + "y": 660, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 520, - "y": 717, + "x": 642, + "y": 594, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 447, - "y": 680, + "x": 642, + "y": 526, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 390, - "y": 623, + "x": 662, + "y": 460, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 353, - "y": 550, + "x": 699, + "y": 403, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 340, - "y": 470, + "x": 750, + "y": 358, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 353, - "y": 390, + "x": 812, + "y": 330, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 390, - "y": 317, + "x": 880, + "y": 320, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 447, - "y": 260, + "x": 300, + "y": 640, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 520, - "y": 223, + "x": 300, + "y": 710, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 300, + "y": 780, "shape": "circle", "r": 16, "orangeEligible": true }, { "x": 600, - "y": 210, + "y": 620, "shape": "circle", "r": 16, "orangeEligible": true }, - { - "x": 680, - "y": 223, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 753, - "y": 260, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 810, - "y": 317, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 847, - "y": 390, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 829, - "y": 212, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 886, - "y": 278, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 926, - "y": 356, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 944, - "y": 442, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 940, - "y": 529, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 914, - "y": 613, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 868, - "y": 687, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 805, - "y": 748, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 728, - "y": 790, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 472, - "y": 790, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 395, - "y": 748, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 332, - "y": 687, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 286, - "y": 613, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 260, - "y": 529, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 256, - "y": 442, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 274, - "y": 356, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 314, - "y": 278, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 371, - "y": 212, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, { "x": 600, - "y": 470, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 780, "shape": "circle", "r": 16, "orangeEligible": true }, { "x": 160, - "y": 740, + "y": 210, "shape": "circle", "r": 16, "orangeEligible": false }, { - "x": 280, - "y": 740, + "x": 247, + "y": 210, "shape": "circle", "r": 16, "orangeEligible": false }, { - "x": 920, - "y": 740, + "x": 333, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 420, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 780, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 867, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 953, + "y": 210, "shape": "circle", "r": 16, "orangeEligible": false }, { "x": 1040, - "y": 740, + "y": 210, "shape": "circle", "r": 16, "orangeEligible": false + }, + { + "x": 480, + "y": 340, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 340, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 720, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": true } ], "walls": [], diff --git a/assets/gamedata/peggle/level-005.json b/assets/gamedata/peggle/level-005.json index cf1926a..c8be340 100644 --- a/assets/gamedata/peggle/level-005.json +++ b/assets/gamedata/peggle/level-005.json @@ -8,617 +8,358 @@ "greenCount": 2, "pegs": [ { - "x": 180, - "y": 250, + "x": 939, + "y": 263, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 300, - "y": 250, + "x": 898, + "y": 326, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 420, - "y": 250, + "x": 845, + "y": 381, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 540, - "y": 250, + "x": 782, + "y": 424, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 660, - "y": 250, + "x": 712, + "y": 453, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 780, - "y": 250, + "x": 638, + "y": 468, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 900, - "y": 250, + "x": 562, + "y": 468, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 1020, - "y": 250, + "x": 488, + "y": 453, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 180, - "y": 370, + "x": 418, + "y": 424, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 300, - "y": 370, + "x": 355, + "y": 381, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 420, - "y": 370, + "x": 302, + "y": 326, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 540, - "y": 370, + "x": 261, + "y": 263, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 660, - "y": 370, + "x": 1021, + "y": 396, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 780, - "y": 370, + "x": 968, + "y": 458, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 900, - "y": 370, + "x": 906, + "y": 511, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 1020, - "y": 370, + "x": 836, + "y": 553, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 180, - "y": 490, + "x": 761, + "y": 585, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 300, - "y": 490, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 420, - "y": 490, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 540, - "y": 490, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 660, - "y": 490, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 780, - "y": 490, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 900, - "y": 490, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 1020, - "y": 490, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 180, - "y": 610, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 300, - "y": 610, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 420, - "y": 610, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 540, - "y": 610, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 660, - "y": 610, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 780, - "y": 610, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 900, - "y": 610, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 1020, - "y": 610, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 180, - "y": 730, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 300, - "y": 730, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 420, - "y": 730, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 540, - "y": 730, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 660, - "y": 730, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 780, - "y": 730, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 900, - "y": 730, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 1020, - "y": 730, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 240, - "y": 310, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 360, - "y": 310, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 480, - "y": 310, + "x": 681, + "y": 604, "shape": "circle", "r": 16, "orangeEligible": true }, { "x": 600, - "y": 310, + "y": 610, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 720, - "y": 310, + "x": 519, + "y": 604, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 840, - "y": 310, + "x": 439, + "y": 585, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 960, - "y": 310, + "x": 364, + "y": 553, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 1080, - "y": 310, + "x": 294, + "y": 511, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 240, - "y": 430, + "x": 232, + "y": 458, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 360, - "y": 430, + "x": 179, + "y": 396, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 480, - "y": 430, + "x": 280, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 280, + "y": 570, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 280, + "y": 645, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 280, + "y": 720, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 440, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 440, + "y": 545, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 440, + "y": 695, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 440, + "y": 770, "shape": "circle", "r": 16, "orangeEligible": true }, { "x": 600, - "y": 430, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 720, - "y": 430, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 840, - "y": 430, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 960, - "y": 430, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 1080, - "y": 430, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 240, - "y": 550, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 360, - "y": 550, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 480, - "y": 550, + "y": 500, "shape": "circle", "r": 16, "orangeEligible": true }, { "x": 600, - "y": 550, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 720, - "y": 550, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 840, - "y": 550, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 960, - "y": 550, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 1080, - "y": 550, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 240, - "y": 670, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 360, - "y": 670, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 480, - "y": 670, + "y": 570, "shape": "circle", "r": 16, "orangeEligible": true }, { "x": 600, - "y": 670, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 720, - "y": 670, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 840, - "y": 670, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 960, - "y": 670, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 1080, - "y": 670, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 240, - "y": 790, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 360, - "y": 790, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 480, - "y": 790, + "y": 710, "shape": "circle", "r": 16, "orangeEligible": true }, { "x": 600, - "y": 790, + "y": 780, "shape": "circle", "r": 16, "orangeEligible": true }, { - "x": 720, - "y": 790, + "x": 760, + "y": 470, "shape": "circle", "r": 16, "orangeEligible": true }, + { + "x": 760, + "y": 545, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 760, + "y": 695, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 760, + "y": 770, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 920, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 920, + "y": 570, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 920, + "y": 645, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 920, + "y": 720, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 200, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 360, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 520, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 680, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, { "x": 840, - "y": 790, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 960, - "y": 790, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 1080, - "y": 790, - "shape": "circle", - "r": 16, - "orangeEligible": true - }, - { - "x": 160, - "y": 210, + "y": 250, "shape": "circle", "r": 16, "orangeEligible": false }, { - "x": 286, - "y": 210, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 411, - "y": 210, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 537, - "y": 210, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 663, - "y": 210, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 789, - "y": 210, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 914, - "y": 210, - "shape": "circle", - "r": 16, - "orangeEligible": false - }, - { - "x": 1040, - "y": 210, + "x": 1000, + "y": 250, "shape": "circle", "r": 16, "orangeEligible": false diff --git a/assets/gamedata/peggle/level-006.json b/assets/gamedata/peggle/level-006.json new file mode 100644 index 0000000..b1a9c52 --- /dev/null +++ b/assets/gamedata/peggle/level-006.json @@ -0,0 +1,370 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 405, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 383, + "y": 491, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 326, + "y": 524, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 263, + "y": 512, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 221, + "y": 462, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 221, + "y": 398, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 262, + "y": 348, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 326, + "y": 336, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 383, + "y": 369, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 985, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 963, + "y": 491, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 906, + "y": 524, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 843, + "y": 512, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 801, + "y": 462, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 801, + "y": 398, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 843, + "y": 348, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 906, + "y": 336, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 963, + "y": 369, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 480, + "y": 390, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 560, + "y": 390, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 640, + "y": 390, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 720, + "y": 390, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 480, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 560, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 640, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 720, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 515, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 685, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 770, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 220, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 372, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 524, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 676, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 828, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 980, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 300, + "y": 620, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 450, + "y": 620, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 600, + "y": 620, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 750, + "y": 620, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 900, + "y": 620, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 300, + "y": 710, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 450, + "y": 710, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 600, + "y": 710, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 750, + "y": 710, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 900, + "y": 710, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 140, + "y": 320, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 180, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 220, + "y": 560, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 1060, + "y": 320, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 980, + "y": 560, + "shape": "circle", + "r": 16, + "orangeEligible": false + } + ], + "walls": [], + "moving": [] +} diff --git a/assets/gamedata/peggle/level-007.json b/assets/gamedata/peggle/level-007.json new file mode 100644 index 0000000..260a9f9 --- /dev/null +++ b/assets/gamedata/peggle/level-007.json @@ -0,0 +1,370 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 500, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 479, + "y": 585, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 424, + "y": 625, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 356, + "y": 625, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 301, + "y": 585, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 280, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 301, + "y": 455, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 356, + "y": 415, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 424, + "y": 415, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 479, + "y": 455, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 300, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 272, + "y": 408, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 228, + "y": 394, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 228, + "y": 346, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 272, + "y": 332, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 385, + "y": 330, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 357, + "y": 368, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 313, + "y": 306, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 357, + "y": 292, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 475, + "y": 330, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 447, + "y": 368, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 447, + "y": 292, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 560, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 532, + "y": 408, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 488, + "y": 394, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 532, + "y": 332, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 968, + "y": 620, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 951, + "y": 672, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 907, + "y": 704, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 853, + "y": 704, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 809, + "y": 672, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 792, + "y": 620, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 809, + "y": 568, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 853, + "y": 536, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 907, + "y": 536, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 951, + "y": 568, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 808, + "y": 500, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 750, + "y": 519, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 750, + "y": 481, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 876, + "y": 468, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 818, + "y": 449, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 948, + "y": 468, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1016, + "y": 500, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 958, + "y": 519, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 817, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 933, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 1050, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 150, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 250, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 350, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": false + } + ], + "walls": [], + "moving": [] +} diff --git a/assets/gamedata/peggle/level-008.json b/assets/gamedata/peggle/level-008.json new file mode 100644 index 0000000..048af83 --- /dev/null +++ b/assets/gamedata/peggle/level-008.json @@ -0,0 +1,363 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 340, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 310, + "y": 352, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 250, + "y": 352, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 220, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 250, + "y": 248, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 310, + "y": 248, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 980, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 692, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 890, + "y": 692, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 860, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 890, + "y": 588, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 588, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 350, + "y": 340, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 421, + "y": 377, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 493, + "y": 414, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 564, + "y": 451, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 636, + "y": 489, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 707, + "y": 526, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 779, + "y": 563, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 980, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 352, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 890, + "y": 352, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 860, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 890, + "y": 248, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 248, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 340, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 310, + "y": 692, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 250, + "y": 692, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 220, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 250, + "y": 588, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 310, + "y": 588, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 340, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 779, + "y": 377, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 707, + "y": 414, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 636, + "y": 451, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 564, + "y": 489, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 493, + "y": 526, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 421, + "y": 563, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 350, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 240, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 345, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 450, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 555, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 660, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 765, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 870, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 975, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 560, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 640, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": false + } + ], + "walls": [], + "moving": [] +} diff --git a/assets/gamedata/peggle/level-009.json b/assets/gamedata/peggle/level-009.json new file mode 100644 index 0000000..204753b --- /dev/null +++ b/assets/gamedata/peggle/level-009.json @@ -0,0 +1,328 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 750, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 733, + "y": 500, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 685, + "y": 553, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 618, + "y": 579, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 547, + "y": 570, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 488, + "y": 529, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 454, + "y": 466, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 454, + "y": 394, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 488, + "y": 331, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 547, + "y": 290, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 618, + "y": 281, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 685, + "y": 307, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 733, + "y": 360, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 670, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 644, + "y": 485, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 584, + "y": 498, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 537, + "y": 460, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 537, + "y": 400, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 584, + "y": 362, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 644, + "y": 375, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 190, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 285, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 261, + "y": 691, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 206, + "y": 703, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 161, + "y": 668, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 161, + "y": 612, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 206, + "y": 577, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 261, + "y": 589, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1045, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1021, + "y": 691, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 966, + "y": 703, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 921, + "y": 668, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 921, + "y": 612, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 966, + "y": 577, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1021, + "y": 589, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 160, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 260, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 360, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 840, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 940, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 1040, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 430, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 543, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 657, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 770, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": false + } + ], + "walls": [], + "moving": [] +} diff --git a/assets/gamedata/peggle/level-010.json b/assets/gamedata/peggle/level-010.json new file mode 100644 index 0000000..e03492c --- /dev/null +++ b/assets/gamedata/peggle/level-010.json @@ -0,0 +1,279 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 600, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 530, + "y": 245, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 460, + "y": 290, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 390, + "y": 335, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 320, + "y": 380, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 670, + "y": 245, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 740, + "y": 290, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 810, + "y": 335, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 880, + "y": 380, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 320, + "y": 460, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 320, + "y": 540, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 320, + "y": 620, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 320, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 880, + "y": 460, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 880, + "y": 540, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 880, + "y": 620, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 880, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 480, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 560, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 640, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 720, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 460, + "y": 460, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 460, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 740, + "y": 460, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 460, + "y": 570, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 570, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 740, + "y": 570, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 140, + "y": 500, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 240, + "y": 500, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 960, + "y": 500, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 1060, + "y": 500, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 430, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 543, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 657, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 770, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": false + } + ], + "walls": [], + "moving": [] +} diff --git a/assets/gamedata/peggle/level-011.json b/assets/gamedata/peggle/level-011.json new file mode 100644 index 0000000..c901d00 --- /dev/null +++ b/assets/gamedata/peggle/level-011.json @@ -0,0 +1,335 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 600, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 619, + "y": 309, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 639, + "y": 369, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 658, + "y": 428, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 677, + "y": 488, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 697, + "y": 547, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 716, + "y": 607, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 735, + "y": 666, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 685, + "y": 629, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 634, + "y": 593, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 584, + "y": 556, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 533, + "y": 519, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 482, + "y": 482, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 432, + "y": 446, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 381, + "y": 409, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 444, + "y": 409, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 506, + "y": 409, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 569, + "y": 409, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 694, + "y": 409, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 756, + "y": 409, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 819, + "y": 409, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 768, + "y": 446, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 718, + "y": 482, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 566, + "y": 593, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 515, + "y": 629, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 465, + "y": 666, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 484, + "y": 607, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 503, + "y": 547, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 561, + "y": 369, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 581, + "y": 309, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 972, + "y": 577, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 942, + "y": 638, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 901, + "y": 693, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 852, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 796, + "y": 779, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 404, + "y": 779, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 348, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 299, + "y": 693, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 258, + "y": 638, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 228, + "y": 577, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 240, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 350, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 460, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 740, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 850, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 960, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": false + } + ], + "walls": [], + "moving": [] +} diff --git a/assets/gamedata/peggle/level-012.json b/assets/gamedata/peggle/level-012.json new file mode 100644 index 0000000..f4f1b51 --- /dev/null +++ b/assets/gamedata/peggle/level-012.json @@ -0,0 +1,272 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 625, + "y": 208, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 678, + "y": 228, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 726, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 765, + "y": 301, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 795, + "y": 349, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 814, + "y": 403, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 820, + "y": 460, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 814, + "y": 517, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 795, + "y": 571, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 765, + "y": 619, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 726, + "y": 660, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 678, + "y": 692, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 625, + "y": 712, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 858, + "y": 432, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 858, + "y": 488, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 280, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 304, + "y": 292, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 327, + "y": 365, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 265, + "y": 320, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 204, + "y": 275, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 356, + "y": 275, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 233, + "y": 365, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 920, + "y": 540, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 944, + "y": 612, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 967, + "y": 685, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 905, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 844, + "y": 595, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 996, + "y": 595, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 873, + "y": 685, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 180, + "y": 660, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 260, + "y": 693, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 340, + "y": 727, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 420, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 760, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 840, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 920, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 1000, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": false + } + ], + "walls": [], + "moving": [] +} diff --git a/assets/gamedata/peggle/level-013.json b/assets/gamedata/peggle/level-013.json new file mode 100644 index 0000000..f38118d --- /dev/null +++ b/assets/gamedata/peggle/level-013.json @@ -0,0 +1,286 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 800, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 783, + "y": 501, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 734, + "y": 569, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 662, + "y": 610, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 579, + "y": 619, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 500, + "y": 593, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 438, + "y": 538, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 404, + "y": 462, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 404, + "y": 378, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 438, + "y": 302, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 500, + "y": 247, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 579, + "y": 221, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 662, + "y": 230, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 734, + "y": 271, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 783, + "y": 339, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 490, + "y": 340, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 340, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 710, + "y": 340, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 490, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 710, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 490, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 710, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 420, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 510, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 690, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 780, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 470, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 557, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 643, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 730, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 160, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 240, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 320, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 880, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 960, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 1040, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": false + } + ], + "walls": [], + "moving": [] +} diff --git a/assets/gamedata/peggle/level-014.json b/assets/gamedata/peggle/level-014.json new file mode 100644 index 0000000..6787e20 --- /dev/null +++ b/assets/gamedata/peggle/level-014.json @@ -0,0 +1,363 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 330, + "y": 230, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 350, + "y": 292, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 370, + "y": 353, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 390, + "y": 415, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 410, + "y": 476, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 430, + "y": 538, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 378, + "y": 500, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 325, + "y": 462, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 273, + "y": 423, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 221, + "y": 385, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 168, + "y": 347, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 233, + "y": 347, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 298, + "y": 347, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 427, + "y": 347, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 492, + "y": 347, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 439, + "y": 385, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 282, + "y": 500, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 230, + "y": 538, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 250, + "y": 476, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 310, + "y": 292, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 870, + "y": 390, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 890, + "y": 452, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 910, + "y": 513, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 930, + "y": 575, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 636, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 970, + "y": 698, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 918, + "y": 660, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 865, + "y": 622, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 813, + "y": 583, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 761, + "y": 545, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 708, + "y": 507, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 773, + "y": 507, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 838, + "y": 507, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 967, + "y": 507, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1032, + "y": 507, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 979, + "y": 545, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 822, + "y": 660, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 770, + "y": 698, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 790, + "y": 636, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 452, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 537, + "y": 480, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 643, + "y": 490, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 200, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 293, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 387, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 480, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 650, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 767, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 883, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 1000, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": false + } + ], + "walls": [], + "moving": [] +} diff --git a/assets/gamedata/peggle/level-015.json b/assets/gamedata/peggle/level-015.json new file mode 100644 index 0000000..85b12ac --- /dev/null +++ b/assets/gamedata/peggle/level-015.json @@ -0,0 +1,286 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 860, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 844, + "y": 559, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 799, + "y": 637, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 730, + "y": 695, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 645, + "y": 726, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 555, + "y": 726, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 470, + "y": 695, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 401, + "y": 637, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 356, + "y": 559, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 340, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 356, + "y": 381, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 401, + "y": 303, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 470, + "y": 245, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 555, + "y": 214, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 645, + "y": 214, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 730, + "y": 245, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 799, + "y": 303, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 844, + "y": 381, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 730, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 705, + "y": 546, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 640, + "y": 594, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 560, + "y": 594, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 495, + "y": 546, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 470, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 495, + "y": 394, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 560, + "y": 346, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 640, + "y": 346, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 705, + "y": 394, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 230, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 340, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 610, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 720, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 300, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 900, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 300, + "y": 720, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 900, + "y": 720, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 480, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 600, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 720, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": false + } + ], + "walls": [], + "moving": [] +} diff --git a/assets/gamedata/peggle/level-016.json b/assets/gamedata/peggle/level-016.json new file mode 100644 index 0000000..832e4ee --- /dev/null +++ b/assets/gamedata/peggle/level-016.json @@ -0,0 +1,468 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 690, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 664, + "y": 534, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 560, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 536, + "y": 534, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 510, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 536, + "y": 406, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 380, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 664, + "y": 406, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 775, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 758, + "y": 546, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 709, + "y": 607, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 639, + "y": 641, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 561, + "y": 641, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 491, + "y": 607, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 442, + "y": 546, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 425, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 442, + "y": 394, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 491, + "y": 333, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 561, + "y": 299, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 639, + "y": 299, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 709, + "y": 333, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 758, + "y": 394, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 860, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 847, + "y": 550, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 810, + "y": 623, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 753, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 680, + "y": 717, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 730, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 717, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 447, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 390, + "y": 623, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 353, + "y": 550, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 340, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 353, + "y": 390, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 390, + "y": 317, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 447, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 223, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 680, + "y": 223, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 753, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 810, + "y": 317, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 847, + "y": 390, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 829, + "y": 212, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 886, + "y": 278, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 926, + "y": 356, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 944, + "y": 442, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 940, + "y": 529, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 914, + "y": 613, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 868, + "y": 687, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 805, + "y": 748, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 728, + "y": 790, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 472, + "y": 790, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 395, + "y": 748, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 332, + "y": 687, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 286, + "y": 613, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 260, + "y": 529, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 256, + "y": 442, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 274, + "y": 356, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 314, + "y": 278, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 371, + "y": 212, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 600, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 160, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 280, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 920, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 1040, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": false + } + ], + "walls": [], + "moving": [] +} diff --git a/assets/gamedata/peggle/level-017.json b/assets/gamedata/peggle/level-017.json new file mode 100644 index 0000000..15aede0 --- /dev/null +++ b/assets/gamedata/peggle/level-017.json @@ -0,0 +1,265 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 710, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 684, + "y": 541, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 619, + "y": 578, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 545, + "y": 565, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 497, + "y": 508, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 497, + "y": 432, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 545, + "y": 375, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 619, + "y": 362, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 684, + "y": 399, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 766, + "y": 539, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 834, + "y": 567, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 902, + "y": 595, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 970, + "y": 623, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 669, + "y": 636, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 697, + "y": 704, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 725, + "y": 772, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 531, + "y": 636, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 503, + "y": 704, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 475, + "y": 772, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 434, + "y": 539, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 366, + "y": 567, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 298, + "y": 595, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 230, + "y": 623, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 434, + "y": 401, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 366, + "y": 373, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 298, + "y": 345, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 230, + "y": 317, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 531, + "y": 304, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 503, + "y": 236, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 669, + "y": 304, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 697, + "y": 236, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 766, + "y": 401, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 834, + "y": 373, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 902, + "y": 345, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 970, + "y": 317, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [] +} diff --git a/assets/gamedata/peggle/level-018.json b/assets/gamedata/peggle/level-018.json new file mode 100644 index 0000000..05aa986 --- /dev/null +++ b/assets/gamedata/peggle/level-018.json @@ -0,0 +1,314 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 660, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 630, + "y": 522, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 570, + "y": 522, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 540, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 570, + "y": 418, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 630, + "y": 418, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 608, + "y": 558, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 548, + "y": 626, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 463, + "y": 659, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 373, + "y": 648, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 298, + "y": 596, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 256, + "y": 515, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 256, + "y": 425, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 298, + "y": 344, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 373, + "y": 292, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 463, + "y": 281, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 548, + "y": 314, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 608, + "y": 382, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 928, + "y": 558, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 868, + "y": 626, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 783, + "y": 659, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 693, + "y": 648, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 618, + "y": 596, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 618, + "y": 344, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 693, + "y": 292, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 783, + "y": 281, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 868, + "y": 314, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 928, + "y": 382, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 790, + "y": 320, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 768, + "y": 408, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 708, + "y": 476, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 458, + "y": 446, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 416, + "y": 365, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 416, + "y": 275, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 458, + "y": 194, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 768, + "y": 232, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 200, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 320, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 440, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 760, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 880, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 1000, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": false + } + ], + "walls": [], + "moving": [] +} diff --git a/assets/gamedata/peggle/level-019.json b/assets/gamedata/peggle/level-019.json new file mode 100644 index 0000000..5255fd6 --- /dev/null +++ b/assets/gamedata/peggle/level-019.json @@ -0,0 +1,328 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 140, + "y": 230, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 165, + "y": 312, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 190, + "y": 393, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 215, + "y": 475, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 240, + "y": 557, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 265, + "y": 638, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 290, + "y": 720, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 300, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 350, + "y": 230, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 375, + "y": 312, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 393, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 425, + "y": 475, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 450, + "y": 557, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 475, + "y": 638, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 500, + "y": 720, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 510, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 560, + "y": 230, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 585, + "y": 312, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 610, + "y": 393, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 635, + "y": 475, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 660, + "y": 557, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 685, + "y": 638, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 710, + "y": 720, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 720, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 770, + "y": 230, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 795, + "y": 312, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 820, + "y": 393, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 845, + "y": 475, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 870, + "y": 557, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 895, + "y": 638, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 920, + "y": 720, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 930, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 980, + "y": 230, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1005, + "y": 312, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1030, + "y": 393, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1055, + "y": 475, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1080, + "y": 557, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1105, + "y": 638, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1130, + "y": 720, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1140, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 180, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 516, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 684, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 852, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 1020, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": false + } + ], + "walls": [], + "moving": [] +} diff --git a/assets/gamedata/peggle/level-020.json b/assets/gamedata/peggle/level-020.json new file mode 100644 index 0000000..9eef81f --- /dev/null +++ b/assets/gamedata/peggle/level-020.json @@ -0,0 +1,335 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 690, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 664, + "y": 534, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 560, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 536, + "y": 534, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 510, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 536, + "y": 406, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 380, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 664, + "y": 406, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 810, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 794, + "y": 550, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 748, + "y": 618, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 680, + "y": 664, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 664, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 452, + "y": 618, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 406, + "y": 550, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 390, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 406, + "y": 390, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 452, + "y": 322, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 276, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 680, + "y": 276, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 748, + "y": 322, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 794, + "y": 390, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 860, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 940, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1020, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 730, + "y": 695, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 770, + "y": 764, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 470, + "y": 695, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 430, + "y": 764, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 340, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 260, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 180, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 470, + "y": 245, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 730, + "y": 245, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 290, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 270, + "y": 285, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 215, + "y": 340, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 140, + "y": 360, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 1060, + "y": 360, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 985, + "y": 340, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 930, + "y": 285, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 910, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 543, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 657, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": false + } + ], + "walls": [], + "moving": [] +} diff --git a/assets/gamedata/peggle/level-021.json b/assets/gamedata/peggle/level-021.json new file mode 100644 index 0000000..c6dcbc4 --- /dev/null +++ b/assets/gamedata/peggle/level-021.json @@ -0,0 +1,307 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 220, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 370, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 670, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 820, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 970, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 220, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 370, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 670, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 820, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 970, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 220, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 370, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 670, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 820, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 970, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 295, + "y": 375, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 445, + "y": 375, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 595, + "y": 375, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 745, + "y": 375, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 895, + "y": 375, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1045, + "y": 375, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 295, + "y": 525, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 445, + "y": 525, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 595, + "y": 525, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 745, + "y": 525, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 895, + "y": 525, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1045, + "y": 525, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 295, + "y": 675, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 445, + "y": 675, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 595, + "y": 675, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 745, + "y": 675, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 895, + "y": 675, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1045, + "y": 675, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 160, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 336, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 512, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 688, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 864, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 1040, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": false + } + ], + "walls": [], + "moving": [] +} diff --git a/assets/gamedata/peggle/level-022.json b/assets/gamedata/peggle/level-022.json new file mode 100644 index 0000000..cbb834b --- /dev/null +++ b/assets/gamedata/peggle/level-022.json @@ -0,0 +1,279 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 240, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 240, + "y": 350, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 240, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 335, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 430, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 310, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 400, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 615, + "y": 400, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 710, + "y": 400, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 350, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 895, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 990, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 380, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 380, + "y": 610, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 380, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 475, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 570, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 660, + "y": 480, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 660, + "y": 570, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 660, + "y": 660, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 755, + "y": 660, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 660, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 940, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 940, + "y": 610, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 940, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1035, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1130, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 160, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 260, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 360, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 460, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 740, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 840, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 940, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 1040, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": false + } + ], + "walls": [], + "moving": [] +} diff --git a/assets/gamedata/peggle/level-023.json b/assets/gamedata/peggle/level-023.json new file mode 100644 index 0000000..cdc9ebe --- /dev/null +++ b/assets/gamedata/peggle/level-023.json @@ -0,0 +1,321 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 240, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 312, + "y": 278, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 384, + "y": 296, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 456, + "y": 314, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 528, + "y": 332, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 350, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 672, + "y": 332, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 744, + "y": 314, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 816, + "y": 296, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 888, + "y": 278, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 960, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 240, + "y": 400, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 312, + "y": 418, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 384, + "y": 436, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 456, + "y": 454, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 528, + "y": 472, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 490, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 672, + "y": 472, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 744, + "y": 454, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 816, + "y": 436, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 888, + "y": 418, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 960, + "y": 400, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 240, + "y": 540, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 312, + "y": 558, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 384, + "y": 576, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 456, + "y": 594, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 528, + "y": 612, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 672, + "y": 612, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 744, + "y": 594, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 816, + "y": 576, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 888, + "y": 558, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 960, + "y": 540, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 240, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 312, + "y": 698, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 384, + "y": 716, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 456, + "y": 734, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 528, + "y": 752, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 770, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 672, + "y": 752, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 744, + "y": 734, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 816, + "y": 716, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 888, + "y": 698, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 960, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [] +} diff --git a/assets/gamedata/peggle/level-024.json b/assets/gamedata/peggle/level-024.json new file mode 100644 index 0000000..3b3ab28 --- /dev/null +++ b/assets/gamedata/peggle/level-024.json @@ -0,0 +1,335 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 220, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 315, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 410, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 505, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 695, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 790, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 885, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 980, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 220, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 315, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 410, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 505, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 695, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 790, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 885, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 980, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 220, + "y": 330, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 220, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 220, + "y": 530, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 220, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 475, + "y": 330, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 475, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 475, + "y": 530, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 475, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 725, + "y": 330, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 725, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 725, + "y": 530, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 725, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 980, + "y": 330, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 980, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 980, + "y": 530, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 980, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 330, + "y": 400, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 430, + "y": 400, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 330, + "y": 530, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 430, + "y": 530, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 580, + "y": 400, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 680, + "y": 400, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 580, + "y": 530, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 680, + "y": 530, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 830, + "y": 400, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 930, + "y": 400, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 830, + "y": 530, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 930, + "y": 530, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [] +} diff --git a/assets/gamedata/peggle/level-025.json b/assets/gamedata/peggle/level-025.json new file mode 100644 index 0000000..cf1926a --- /dev/null +++ b/assets/gamedata/peggle/level-025.json @@ -0,0 +1,629 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 180, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 300, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 420, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 540, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 660, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 780, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 900, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1020, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 180, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 300, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 420, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 540, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 660, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 780, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 900, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1020, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 180, + "y": 490, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 300, + "y": 490, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 420, + "y": 490, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 540, + "y": 490, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 660, + "y": 490, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 780, + "y": 490, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 900, + "y": 490, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1020, + "y": 490, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 180, + "y": 610, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 300, + "y": 610, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 420, + "y": 610, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 540, + "y": 610, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 660, + "y": 610, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 780, + "y": 610, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 900, + "y": 610, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1020, + "y": 610, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 180, + "y": 730, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 300, + "y": 730, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 420, + "y": 730, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 540, + "y": 730, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 660, + "y": 730, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 780, + "y": 730, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 900, + "y": 730, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1020, + "y": 730, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 240, + "y": 310, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 360, + "y": 310, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 480, + "y": 310, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 310, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 720, + "y": 310, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 840, + "y": 310, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 960, + "y": 310, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1080, + "y": 310, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 240, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 360, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 480, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 720, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 840, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 960, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1080, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 240, + "y": 550, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 360, + "y": 550, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 480, + "y": 550, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 550, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 720, + "y": 550, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 840, + "y": 550, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 960, + "y": 550, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1080, + "y": 550, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 240, + "y": 670, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 360, + "y": 670, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 480, + "y": 670, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 670, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 720, + "y": 670, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 840, + "y": 670, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 960, + "y": 670, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1080, + "y": 670, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 240, + "y": 790, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 360, + "y": 790, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 480, + "y": 790, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 790, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 720, + "y": 790, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 840, + "y": 790, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 960, + "y": 790, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1080, + "y": 790, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 160, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 286, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 411, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 537, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 663, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 789, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 914, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 1040, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": false + } + ], + "walls": [], + "moving": [] +} diff --git a/assets/gamedata/peggle/levels.json b/assets/gamedata/peggle/levels.json index 784a970..0745e79 100644 --- a/assets/gamedata/peggle/levels.json +++ b/assets/gamedata/peggle/levels.json @@ -11,34 +11,194 @@ }, { "level": 2, - "name": "Fetch!", - "masterId": "kona", - "powerId": "multiball", + "name": "Fine China", + "masterId": "ethel", + "powerId": "superguide", "file": "level-002.json", - "background": "park" + "background": "parlor" }, { "level": 3, - "name": "Hocus Pocus", - "masterId": "zanthor", - "powerId": "spaceblast", + "name": "Doily Drop", + "masterId": "ethel", + "powerId": "superguide", "file": "level-003.json", - "background": "arcana" + "background": "parlor" }, { "level": 4, - "name": "X-Ray Vision", - "masterId": "fireball", - "powerId": "fireball", + "name": "Lace & Grace", + "masterId": "ethel", + "powerId": "superguide", "file": "level-004.json", - "background": "lab" + "background": "parlor" }, { "level": 5, + "name": "Grandma's Attic", + "masterId": "ethel", + "powerId": "superguide", + "file": "level-005.json", + "background": "parlor" + }, + { + "level": 6, + "name": "Fetch!", + "masterId": "kona", + "powerId": "multiball", + "file": "level-006.json", + "background": "park" + }, + { + "level": 7, + "name": "Paw Prints", + "masterId": "kona", + "powerId": "multiball", + "file": "level-007.json", + "background": "park" + }, + { + "level": 8, + "name": "Buried Bones", + "masterId": "kona", + "powerId": "multiball", + "file": "level-008.json", + "background": "park" + }, + { + "level": 9, + "name": "Squeaky Toy", + "masterId": "kona", + "powerId": "multiball", + "file": "level-009.json", + "background": "park" + }, + { + "level": 10, + "name": "Best in Show", + "masterId": "kona", + "powerId": "multiball", + "file": "level-010.json", + "background": "park" + }, + { + "level": 11, + "name": "Hocus Pocus", + "masterId": "zanthor", + "powerId": "spaceblast", + "file": "level-011.json", + "background": "arcana" + }, + { + "level": 12, + "name": "Crescent Moon", + "masterId": "zanthor", + "powerId": "spaceblast", + "file": "level-012.json", + "background": "arcana" + }, + { + "level": 13, + "name": "Crystal Ball", + "masterId": "zanthor", + "powerId": "spaceblast", + "file": "level-013.json", + "background": "arcana" + }, + { + "level": 14, + "name": "Twin Stars", + "masterId": "zanthor", + "powerId": "spaceblast", + "file": "level-014.json", + "background": "arcana" + }, + { + "level": 15, + "name": "Grand Sigil", + "masterId": "zanthor", + "powerId": "spaceblast", + "file": "level-015.json", + "background": "arcana" + }, + { + "level": 16, + "name": "X-Ray Vision", + "masterId": "fireball", + "powerId": "fireball", + "file": "level-016.json", + "background": "lab" + }, + { + "level": 17, + "name": "Solar Flare", + "masterId": "fireball", + "powerId": "fireball", + "file": "level-017.json", + "background": "lab" + }, + { + "level": 18, + "name": "Atomic Age", + "masterId": "fireball", + "powerId": "fireball", + "file": "level-018.json", + "background": "lab" + }, + { + "level": 19, + "name": "Meteor Shower", + "masterId": "fireball", + "powerId": "fireball", + "file": "level-019.json", + "background": "lab" + }, + { + "level": 20, + "name": "Supernova", + "masterId": "fireball", + "powerId": "fireball", + "file": "level-020.json", + "background": "lab" + }, + { + "level": 21, + "name": "Opening Move", + "masterId": "victor", + "powerId": "zenball", + "file": "level-021.json", + "background": "study" + }, + { + "level": 22, + "name": "Knight's Tour", + "masterId": "victor", + "powerId": "zenball", + "file": "level-022.json", + "background": "study" + }, + { + "level": 23, + "name": "Double Gambit", + "masterId": "victor", + "powerId": "zenball", + "file": "level-023.json", + "background": "study" + }, + { + "level": 24, + "name": "Fortress", + "masterId": "victor", + "powerId": "zenball", + "file": "level-024.json", + "background": "study" + }, + { + "level": 25, "name": "Checkmate", "masterId": "victor", "powerId": "zenball", - "file": "level-005.json", + "file": "level-025.json", "background": "study" } ] diff --git a/assets/gamedata/peggle/sprites.md b/assets/gamedata/peggle/sprites.md index 9ffc728..0ee6a6f 100644 --- a/assets/gamedata/peggle/sprites.md +++ b/assets/gamedata/peggle/sprites.md @@ -79,6 +79,25 @@ One optional PNG per friend/master, shown behind the peg field on their levels. code change). Missing files fall back to the procedural starfield with a harmless console warning. +## Intro videos (per friend) + +One optional MP4 per friend, played on the intro screen that precedes their +first level (levels 1, 6, 11, 16, 21 — detected automatically as the first +level of each friend's block in `levels.json`). + +- **Path & naming:** `assets/videos/peggle/.mp4` — e.g. `ethel.mp4` + (already saved), `kona.mp4`, `zanthor.mp4`, `fireball.mp4`, `victor.mp4`. +- **Dimensions:** **720 × 720 px**, MP4 (H.264 video + AAC audio for the widest + browser support). Displayed at 560×560 in the intro window. +- **Behavior:** autoplays when the intro opens (the level click counts as the + user gesture browsers require); when it finishes, a ▶ Replay overlay appears + and clicking the video plays it again. The Continue button starts the level + (and never auto-fires the cannon). +- **Fallback:** a friend with no video yet shows their static 300×300 roster + portrait in the same window — the intro screen works either way. +- The intro shows on every fresh entry to that level (level select or "Next + Level") but is skipped on Replay / Try Again. + ## Not covered by the sheet - **Level editor** (`?peggle-editor=1`) intentionally keeps procedural circles — diff --git a/assets/videos/peggle/ethel.mp4 b/assets/videos/peggle/ethel.mp4 new file mode 100644 index 0000000..70840e2 Binary files /dev/null and b/assets/videos/peggle/ethel.mp4 differ diff --git a/assets/videos/peggle/kona.mp4 b/assets/videos/peggle/kona.mp4 new file mode 100644 index 0000000..4d75adb Binary files /dev/null and b/assets/videos/peggle/kona.mp4 differ diff --git a/src/games/peggle/PeggleGame.js b/src/games/peggle/PeggleGame.js index c8193b2..18b4b5d 100644 --- a/src/games/peggle/PeggleGame.js +++ b/src/games/peggle/PeggleGame.js @@ -60,6 +60,9 @@ export default class PeggleGame extends Phaser.Scene { this.portrait = null; this.tube = null; this.reservoirBalls = []; + this.inputHoldUntil = 0; // suppress launches right after UI clicks + this.introDom = null; + this.introVideo = null; // end-of-level celebration this.celebrating = false; @@ -171,6 +174,9 @@ export default class PeggleGame extends Phaser.Scene { // updatePowerHud() / the celebration don't poke dead objects before the // next level rebuilds them. this.powerStatus = null; + if (this.introVideo) { try { this.introVideo.pause(); } catch (_) { /* already gone */ } this.introVideo = null; } + this.introDom?.destroy(); + this.introDom = null; this.celebrating = false; this.countDone = false; this.countTween?.remove(); @@ -215,53 +221,68 @@ export default class PeggleGame extends Phaser.Scene { }).setOrigin(0.5); this.layer.add(prog); - const COLS = Math.min(5, this.manifest.length); - const SIZE = 240; - const GAP = 26; - const gridW = COLS * SIZE + (COLS - 1) * GAP; - const left = cx - gridW / 2 + SIZE / 2; - const top = 420; + // One row per friend: portrait + name + power on the left, that friend's + // level tiles on the right. Blocks are consecutive same-master runs, so + // future friends slot in with no code change. + const blocks = []; + for (const entry of this.manifest) { + const last = blocks[blocks.length - 1]; + if (last && last.masterId === entry.masterId) last.entries.push(entry); + else blocks.push({ masterId: entry.masterId, entries: [entry] }); + } - this.manifest.forEach((entry, i) => { - const col = i % COLS; - const row = Math.floor(i / COLS); - const x = left + col * (SIZE + GAP); - const y = top + row * (SIZE + GAP + 60); - const level = entry.level; - const cleared = level <= this.levelsCompleted; - const playable = level <= nextLevel; - const master = this.masterFor(entry); - const power = POWERS[entry.powerId]; + const rowH = 134; + const top = 300; + const SIZE = 110; + blocks.forEach((blk, b) => { + const y = top + b * rowH; + const first = blk.entries[0]; + const master = this.masterFor(first); + const power = POWERS[first.powerId]; + const rowUnlocked = first.level <= nextLevel; - const fill = cleared ? 0x1f5c3a : playable ? 0x1e3a52 : 0x16202b; - const stroke = cleared ? 0x2ecc71 : playable ? COLORS.gold : 0x2a3744; - const tile = this.add.rectangle(x, y, SIZE, SIZE + 46, fill).setStrokeStyle(playable || cleared ? 3 : 2, stroke, 1); - - const face = this.add.image(x, y - 46, 'opponents', master.spriteIndex ?? 0) - .setDisplaySize(120, 120); - if (!playable && !cleared) face.setTint(0x334455).setAlpha(0.6); - - const num = this.add.text(x - SIZE / 2 + 16, y - SIZE / 2 - 6, String(level), { + const face = this.add.image(320, y, 'opponents', master.spriteIndex ?? 0) + .setDisplaySize(104, 104); + if (!rowUnlocked) face.setTint(0x334455).setAlpha(0.6); + const name = this.add.text(400, y - 24, master.name, { fontFamily: 'Righteous', fontSize: '30px', - color: playable || cleared ? COLORS.goldHex : '#54606b', - }).setOrigin(0, 0); - const name = this.add.text(x, y + 36, entry.name, { - fontFamily: 'Righteous', fontSize: '26px', - color: playable || cleared ? COLORS.textHex : '#54606b', - }).setOrigin(0.5); - const info = this.add.text(x, y + 74, - cleared ? '✓ cleared' : playable ? `${master.name} · ${power?.name ?? ''}` : 'locked', { - fontFamily: '"Julius Sans One"', fontSize: '17px', + color: rowUnlocked ? COLORS.textHex : '#54606b', + }).setOrigin(0, 0.5); + const ptxt = this.add.text(400, y + 18, power?.name ?? '', { + fontFamily: '"Julius Sans One"', fontSize: '19px', + color: rowUnlocked ? '#3ed164' : '#54606b', + }).setOrigin(0, 0.5); + this.layer.add([face, name, ptxt]); + + blk.entries.forEach((entry, i) => { + const x = 850 + i * 140; + const level = entry.level; + const cleared = level <= this.levelsCompleted; + const playable = level <= nextLevel; + + const fill = cleared ? 0x1f5c3a : playable ? 0x1e3a52 : 0x16202b; + const stroke = cleared ? 0x2ecc71 : playable ? COLORS.gold : 0x2a3744; + const tile = this.add.rectangle(x, y, SIZE, SIZE, fill) + .setStrokeStyle(playable || cleared ? 3 : 2, stroke, 1); + const num = this.add.text(x, y - 12, String(level), { + fontFamily: 'Righteous', fontSize: '36px', + color: playable || cleared ? COLORS.textHex : '#54606b', + }).setOrigin(0.5); + const tag = this.add.text(x, y + 30, cleared ? '✓' : playable ? entry.name : 'locked', { + fontFamily: '"Julius Sans One"', fontSize: '13px', color: cleared ? '#9be7b4' : playable ? COLORS.mutedHex : '#54606b', }).setOrigin(0.5); - this.layer.add([tile, face, num, name, info]); + // Keep long level names inside the tile. + if (tag.width > SIZE - 10) tag.setScale((SIZE - 10) / tag.width); + this.layer.add([tile, num, tag]); - if (playable) { - tile.setInteractive({ useHandCursor: true }); - tile.on('pointerover', () => tile.setStrokeStyle(4, COLORS.gold, 1)); - tile.on('pointerout', () => tile.setStrokeStyle(3, stroke, 1)); - tile.on('pointerup', () => this.playLevel(entry)); - } + if (playable) { + tile.setInteractive({ useHandCursor: true }); + tile.on('pointerover', () => tile.setStrokeStyle(4, COLORS.gold, 1)); + tile.on('pointerout', () => tile.setStrokeStyle(3, stroke, 1)); + tile.on('pointerup', () => this.playLevel(entry)); + } + }); }); const resume = new Button(this, cx - 150, GAME_HEIGHT - 78, `Play Level ${nextLevel}`, @@ -301,7 +322,7 @@ export default class PeggleGame extends Phaser.Scene { // ── Level start ───────────────────────────────────────────────────────────── - async playLevel(entry) { + async playLevel(entry, opts = {}) { if (!entry) return; let layout = this.levelCache.get(entry.file); if (!layout) { @@ -313,7 +334,115 @@ export default class PeggleGame extends Phaser.Scene { return; } } - this.startLevel(entry, layout); + if (!opts.skipIntro && !this.testLevel && this.isFirstOfBlock(entry)) { + this.showFriendIntro(entry, layout); + } else { + this.startLevel(entry, layout); + } + } + + // A friend's first level (the manifest entry where masterId changes) gets + // the video intro screen. + isFirstOfBlock(entry) { + const idx = this.manifest.findIndex((m) => m.level === entry.level); + if (idx < 0) return false; + return idx === 0 || this.manifest[idx - 1].masterId !== entry.masterId; + } + + // ── Friend intro (video + power explainer before a friend's first level) ──── + + showFriendIntro(entry, layout) { + this.view = 'intro'; + this.state = null; + this.overlayUp = true; + this.clearLayer(); + const master = this.masterFor(entry); + const power = POWERS[entry.powerId]; + const cx = GAME_WIDTH / 2; + const cy = GAME_HEIGHT / 2; + + const dim = this.add.rectangle(cx, cy, GAME_WIDTH, GAME_HEIGHT, 0x06101c, 0.96).setInteractive(); + const panel = this.add.graphics(); + panel.fillStyle(COLORS.panel, 0.98); + panel.fillRoundedRect(cx - 700, cy - 400, 1400, 800, 24); + panel.lineStyle(3, COLORS.gold, 1); + panel.strokeRoundedRect(cx - 700, cy - 400, 1400, 800, 24); + const headline = this.add.text(cx, cy - 352, `LEVEL ${entry.level} — MEET YOUR FRIEND`, { + fontFamily: '"Julius Sans One"', fontSize: '24px', color: COLORS.mutedHex, + }).setOrigin(0.5); + this.layer.add([dim, panel, headline]); + + // Video window (720×720 source shown at 560×560). Click replays once the + // video has finished; a missing/broken file falls back to the portrait. + const vx = cx - 380; + const vy = cy + 10; + const wrap = document.createElement('div'); + wrap.style.cssText = 'position:relative; width:560px; height:560px; border-radius:18px; overflow:hidden;' + + ' border:3px solid #f0c75e; background:#0a1522; cursor:pointer;'; + const vid = document.createElement('video'); + vid.src = `assets/videos/peggle/${master.id}.mp4`; + vid.playsInline = true; + vid.style.cssText = 'width:100%; height:100%; object-fit:cover;'; + const replay = document.createElement('div'); + replay.style.cssText = 'position:absolute; inset:0; display:none; flex-direction:column; align-items:center;' + + ' justify-content:center; background:rgba(6,16,28,.55); color:#fff; font-family:Righteous,sans-serif;'; + replay.innerHTML = '
Replay
'; + wrap.append(vid, replay); + wrap.addEventListener('click', () => { + replay.style.display = 'none'; + vid.currentTime = 0; + vid.play().catch(() => { replay.style.display = 'flex'; }); + }); + vid.addEventListener('ended', () => { replay.style.display = 'flex'; }); + vid.addEventListener('error', () => { + // No video for this friend (yet) — show their portrait frame instead. + this.introDom?.destroy(); + this.introDom = null; + this.introVideo = null; + const face = this.add.image(vx, vy, 'opponents', master.spriteIndex ?? 0).setDisplaySize(560, 560); + const frame = this.add.graphics(); + frame.lineStyle(3, COLORS.gold, 1); + frame.strokeRoundedRect(vx - 280, vy - 280, 560, 560, 18); + this.layer.add([face, frame]); + }); + this.introDom = this.add.dom(vx, vy, wrap); + this.introVideo = vid; + vid.play().catch(() => { + // Autoplay blocked — invite the user to start it. + replay.lastElementChild.textContent = 'Play'; + replay.style.display = 'flex'; + }); + + // Friend + power explainer column. + const tx = cx - 40; + const name = this.add.text(tx, cy - 250, master.name, { + fontFamily: 'Righteous', fontSize: '58px', color: COLORS.goldHex, + }).setOrigin(0, 0.5); + const bio = this.add.text(tx, cy - 178, master.bio ?? '', { + fontFamily: '"Julius Sans One"', fontSize: '22px', color: COLORS.textHex, + wordWrap: { width: 640 }, lineSpacing: 6, + }).setOrigin(0, 0); + const pTitle = this.add.text(tx, cy - 20, `SPECIAL SHOT — ${power?.name ?? ''}`, { + fontFamily: 'Righteous', fontSize: '30px', color: '#3ed164', + }).setOrigin(0, 0.5); + const pDesc = this.add.text(tx, cy + 16, power?.desc ?? '', { + fontFamily: '"Julius Sans One"', fontSize: '24px', color: COLORS.textHex, + wordWrap: { width: 640 }, lineSpacing: 8, + }).setOrigin(0, 0); + const hint = this.add.text(tx, cy + 148, 'Hit a green peg during a shot to charge it up!', { + fontFamily: '"Julius Sans One"', fontSize: '20px', color: COLORS.mutedHex, + }).setOrigin(0, 0.5); + this.layer.add([name, bio, pTitle, pDesc, hint]); + + const cont = new Button(this, cx + 380, cy + 310, 'Continue ▶', () => { + // Swallow this click entirely — the pointerup that triggered the button + // must not also fire the cannon once the level is live. + this.inputHoldUntil = this.time.now + 400; + this.startLevel(entry, layout); + }, { width: 300, height: 66, fontSize: 26 }); + const back = new Button(this, cx + 30, cy + 310, 'Back', () => this.showLevelSelect(), + { variant: 'ghost', width: 180, height: 66, fontSize: 24 }); + this.layer.add([cont, back]); } startLevel(entry, layout) { @@ -333,8 +462,9 @@ export default class PeggleGame extends Phaser.Scene { this.drawBucket(); this.drawLauncher(); this.drawHud(); + // The portrait (playIntro: true) already queues one random intro clip and + // animates the speech visualizer — don't queue a second one here. this.drawMasterPanel(); - this.say('intro'); } // ── Board rendering ───────────────────────────────────────────────────────── @@ -695,6 +825,7 @@ export default class PeggleGame extends Phaser.Scene { }); this.input.on('pointerup', (pointer) => { if (this.view !== 'play' || !this.state || this.overlayUp) return; + if (this.time.now < this.inputHoldUntil) return; // e.g. the intro's Continue click if (this.state.phase !== 'aim' || this.state.ballsLeft <= 0) return; const bx = pointer.x - BOARD_X; const by = pointer.y - BOARD_Y; @@ -1110,11 +1241,11 @@ export default class PeggleGame extends Phaser.Scene { }).setOrigin(0.5)); } } else { - btns.push(new Button(this, cx, cy + 60, 'Try Again', () => this.playLevel(this.entry), + btns.push(new Button(this, cx, cy + 60, 'Try Again', () => this.playLevel(this.entry, { skipIntro: true }), { width: 320, height: 60, fontSize: 26 })); } if (!this.returnToEditor) { - btns.push(new Button(this, cx - 115, cy + 145, 'Replay', () => this.playLevel(this.entry), + btns.push(new Button(this, cx - 115, cy + 145, 'Replay', () => this.playLevel(this.entry, { skipIntro: true }), { width: 200, height: 54, fontSize: 22, variant: 'ghost' })); btns.push(new Button(this, cx + 115, cy + 145, 'Levels', () => this.showLevelSelect(), { width: 200, height: 54, fontSize: 22, variant: 'ghost' })); diff --git a/tools/genPeggleLevels.js b/tools/genPeggleLevels.js index ace13c3..0b28aba 100644 --- a/tools/genPeggleLevels.js +++ b/tools/genPeggleLevels.js @@ -1,6 +1,10 @@ -// Generates the first five Peggle stub layouts + the level manifest. +// Generates the Peggle level bank + manifest: 25 levels, 5 per friend. // node tools/genPeggleLevels.js -// Writes assets/gamedata/peggle/level-001..005.json and levels.json. +// Writes assets/gamedata/peggle/level-001..025.json and levels.json. +// +// Blocks: 1-5 Ethel (superguide), 6-10 Kona (multiball), 11-15 Zanthor +// (spaceblast), 16-20 Fireball (fireball), 21-25 Victor (zenball). Each block +// is one shape family with 5 variants ramping in density/difficulty. // // Layouts are starting points meant to be hand-tuned later in the editor // (index.html?peggle-editor=1); pegs violating spacing are dropped, so shapes @@ -55,6 +59,23 @@ function circle(cx, cy, radius, n, opts = {}) { return arc(cx, cy, radius, 0, Math.PI * 2 * (1 - 1 / n), n, opts); } +// Pentagram stroke centered at (cx, cy), point-up, `per` pegs per stroke. +function pentagram(cx, cy, radius, per, opts = {}) { + const verts = []; + for (let i = 0; i < 5; i++) { + const a = -Math.PI / 2 + (i * 2 * Math.PI) / 5; + verts.push([cx + radius * Math.cos(a), cy + radius * Math.sin(a)]); + } + const order = [0, 2, 4, 1, 3, 0]; + const pegs = []; + for (let i = 0; i < 5; i++) { + const [x0, y0] = verts[order[i]]; + const [x1, y1] = verts[order[i + 1]]; + pegs.push(...line(x0, y0, x1, y1, per, opts)); + } + return pegs; +} + // Drop pegs out of bounds or too close to an earlier peg. function settle(pegs) { const out = []; @@ -84,115 +105,379 @@ function levelFile(pegs, over = {}) { const el = { orangeEligible: true }; -// ── Level 1 — Tea Time (Ethel): gentle nested arcs + bottom row ───────────── +// ── Ethel (1-5): parlor arcs & chandeliers ─────────────────────────────────── -function level1() { - const pegs = [ - ...arc(600, 120, 420, Math.PI * 0.15, Math.PI * 0.85, 14, el), - ...arc(600, 60, 560, Math.PI * 0.20, Math.PI * 0.80, 13, el), - ...arc(600, 10, 700, Math.PI * 0.25, Math.PI * 0.75, 12, el), - ...line(160, 770, 1040, 770, 10), - ...line(320, 300, 880, 300, 5), - ]; - return levelFile(settle(pegs)); -} - -// ── Level 2 — Fetch! (Kona): a dog bone + scattered field ─────────────────── - -function level2() { - const pegs = [ - // bone: two knuckle circles joined by a shaft - ...circle(310, 430, 95, 9, el), - ...circle(890, 430, 95, 9, el), - ...line(400, 390, 800, 390, 6, el), - ...line(400, 470, 800, 470, 6, el), - ...line(430, 430, 770, 430, 5, el), - // scattered field above and below - ...grid(220, 240, 6, 1, 152, 0), - ...grid(300, 620, 5, 2, 150, 90), - ...line(140, 320, 220, 560, 3), - ...line(1060, 320, 980, 560, 3), - ]; - return levelFile(settle(pegs)); -} - -// ── Level 3 — Hocus Pocus (Zanthor): five-point star inside an arc ────────── - -function level3() { - const cx = 600; - const cy = 480; - const outer = 230; - // star vertices (point up) - const verts = []; - for (let i = 0; i < 5; i++) { - const a = -Math.PI / 2 + (i * 2 * Math.PI) / 5; - verts.push([cx + outer * Math.cos(a), cy + outer * Math.sin(a)]); - } - const order = [0, 2, 4, 1, 3, 0]; // pentagram stroke +function ethelLevel(v) { const pegs = []; - for (let i = 0; i < 5; i++) { - const [x0, y0] = verts[order[i]]; - const [x1, y1] = verts[order[i + 1]]; - pegs.push(...line(x0, y0, x1, y1, 8, el)); + switch (v) { + case 0: // Tea Time — gentle nested arcs + bottom row + pegs.push( + ...arc(600, 120, 420, Math.PI * 0.15, Math.PI * 0.85, 14, el), + ...arc(600, 60, 560, Math.PI * 0.20, Math.PI * 0.80, 13, el), + ...arc(600, 10, 700, Math.PI * 0.25, Math.PI * 0.75, 12, el), + ...line(160, 770, 1040, 770, 10), + ...line(320, 300, 880, 300, 5), + ); + break; + case 1: // Fine China — a saucer stack: opposing arc pairs + pegs.push( + ...arc(600, 40, 500, Math.PI * 0.22, Math.PI * 0.78, 12, el), + ...arc(600, 940, 500, -Math.PI * 0.76, -Math.PI * 0.24, 12, el), + ...arc(600, 470, 210, 0, Math.PI * 2 * (1 - 1 / 12), 12, el), + ...line(150, 480, 330, 480, 3), + ...line(870, 480, 1050, 480, 3), + ...line(380, 740, 820, 740, 5), + ); + break; + case 2: // Doily Drop — lace fan of alternating arcs with side tassels + pegs.push( + ...arc(600, 130, 350, Math.PI * 0.1, Math.PI * 0.9, 12, el), + ...arc(600, 130, 470, Math.PI * 0.14, Math.PI * 0.86, 13, el), + ...arc(600, 130, 590, Math.PI * 0.18, Math.PI * 0.82, 14, el), + ...line(180, 260, 180, 560, 4), + ...line(1020, 260, 1020, 560, 4), + ...line(420, 760, 780, 760, 4), + ); + break; + case 3: // Lace & Grace — S-curve of two big arcs + hanging drops + pegs.push( + ...arc(320, 300, 240, -Math.PI * 0.5, Math.PI * 0.5, 12, el), + ...arc(880, 560, 240, Math.PI * 0.5, Math.PI * 1.5, 12, el), + ...line(300, 640, 300, 780, 3, el), + ...line(600, 620, 600, 780, 3, el), + ...line(160, 210, 420, 210, 4), + ...line(780, 210, 1040, 210, 4), + ...grid(480, 340, 3, 2, 120, 100, el), + ); + break; + default: // Grandma's Attic — chandelier: arcs + hanging strands + pegs.push( + ...arc(600, 90, 380, Math.PI * 0.15, Math.PI * 0.85, 12, el), + ...arc(600, 90, 520, Math.PI * 0.2, Math.PI * 0.8, 13, el), + ...line(280, 420, 280, 720, 5, el), + ...line(440, 470, 440, 770, 5, el), + ...line(600, 500, 600, 780, 5, el), + ...line(760, 470, 760, 770, 5, el), + ...line(920, 420, 920, 720, 5, el), + ...line(200, 250, 1000, 250, 6), + ); + break; } - pegs.push(...arc(600, 430, 400, Math.PI * 0.12, Math.PI * 0.88, 15, el)); - pegs.push(...line(240, 240, 460, 240, 3)); - pegs.push(...line(740, 240, 960, 240, 3)); return levelFile(settle(pegs)); } -// ── Level 4 — X-Ray Vision (Fireball): concentric rings, orange core ──────── +// ── Kona (6-10): bones, paws & toys ────────────────────────────────────────── -function level4() { - const cx = 600; - const cy = 470; - const pegs = [ - ...circle(cx, cy, 90, 8, el), - ...circle(cx, cy, 175, 14, el), - ...circle(cx, cy, 260, 20, el), - ...arc(cx, cy, 345, Math.PI * -0.35, Math.PI * 1.35, 22), - { x: cx, y: cy, ...el }, - ...line(160, 740, 400, 740, 3), - ...line(800, 740, 1040, 740, 3), - ]; +function konaLevel(v) { + const pegs = []; + switch (v) { + case 0: // Fetch! — the dog bone + pegs.push( + ...circle(310, 430, 95, 9, el), + ...circle(890, 430, 95, 9, el), + ...line(400, 390, 800, 390, 6, el), + ...line(400, 470, 800, 470, 6, el), + ...line(430, 430, 770, 430, 5, el), + ...grid(220, 240, 6, 1, 152, 0), + ...grid(300, 620, 5, 2, 150, 90), + ...line(140, 320, 220, 560, 3), + ...line(1060, 320, 980, 560, 3), + ); + break; + case 1: { // Paw Prints — big pad + four toes, twice + const paw = (cx, cy, s) => [ + ...circle(cx, cy, 110 * s, 10, el), + ...circle(cx - 130 * s, cy - 150 * s, 40 * s, 5, el), + ...circle(cx - 45 * s, cy - 190 * s, 40 * s, 5, el), + ...circle(cx + 45 * s, cy - 190 * s, 40 * s, 5, el), + ...circle(cx + 130 * s, cy - 150 * s, 40 * s, 5, el), + ]; + pegs.push( + ...paw(390, 520, 1), + ...paw(880, 620, 0.8), + ...line(700, 240, 1050, 240, 4), + ...line(150, 740, 350, 740, 3), + ); + break; + } + case 2: // Buried Bones — two crossed bones + dirt scatter + pegs.push( + ...circle(280, 300, 60, 6, el), + ...circle(920, 640, 60, 6, el), + ...line(350, 340, 850, 600, 8, el), + ...circle(920, 300, 60, 6, el), + ...circle(280, 640, 60, 6, el), + ...line(850, 340, 350, 600, 8, el), + ...grid(240, 760, 8, 1, 105, 0), + ...line(560, 210, 640, 210, 2), + ); + break; + case 3: // Squeaky Toy — ball on a rope with small toys + pegs.push( + ...circle(600, 430, 150, 13, el), + ...circle(600, 430, 70, 7, el), + ...line(600, 190, 600, 340, 3, el), + ...circle(220, 640, 65, 7, el), + ...circle(980, 640, 65, 7, el), + ...line(160, 300, 360, 300, 3), + ...line(840, 300, 1040, 300, 3), + ...line(430, 740, 770, 740, 4), + ); + break; + default: // Best in Show — kennel house + trophy rows + pegs.push( + ...line(600, 200, 320, 380, 5, el), + ...line(600, 200, 880, 380, 5, el), + ...line(320, 380, 320, 700, 5, el), + ...line(880, 380, 880, 700, 5, el), + ...line(320, 700, 880, 700, 8, el), + ...grid(460, 460, 3, 3, 140, 110, el), + ...line(140, 500, 240, 500, 2), + ...line(960, 500, 1060, 500, 2), + ...line(430, 780, 770, 780, 4), + ); + break; + } return levelFile(settle(pegs)); } -// ── Level 5 — Checkmate (Victor): diagonal checkerboard lattice ───────────── +// ── Zanthor (11-15): stars, moons & sigils ─────────────────────────────────── -function level5() { - const pegs = [ - ...grid(180, 250, 8, 5, 120, 120, el), - ...grid(240, 310, 8, 5, 120, 120, el), - ...line(160, 210, 1040, 210, 8), - ]; +function zanthorLevel(v) { + const pegs = []; + switch (v) { + case 0: // Hocus Pocus — pentagram inside an arc + pegs.push( + ...pentagram(600, 480, 230, 8, el), + ...arc(600, 430, 400, Math.PI * 0.12, Math.PI * 0.88, 15, el), + ...line(240, 240, 460, 240, 3), + ...line(740, 240, 960, 240, 3), + ); + break; + case 1: // Crescent Moon — offset arcs + scattered stars + pegs.push( + ...arc(560, 460, 260, -Math.PI * 0.42, Math.PI * 0.42, 13, el), + ...arc(660, 460, 200, -Math.PI * 0.40, Math.PI * 0.40, 10, el), + ...pentagram(280, 300, 80, 3, el), + ...pentagram(920, 620, 80, 3, el), + ...line(180, 660, 420, 760, 4), + ...line(760, 220, 1000, 220, 4), + ); + break; + case 2: // Crystal Ball — orb on a stand with facet lattice + pegs.push( + ...circle(600, 420, 200, 15, el), + ...grid(490, 340, 3, 3, 110, 90, el), + ...line(420, 680, 780, 680, 5, el), + ...line(470, 760, 730, 760, 4, el), + ...line(160, 300, 320, 300, 3), + ...line(880, 300, 1040, 300, 3), + ); + break; + case 3: // Twin Stars — two pentagrams joined by a beam + pegs.push( + ...pentagram(330, 400, 170, 6, el), + ...pentagram(870, 560, 170, 6, el), + ...line(430, 470, 750, 500, 4, el), + ...line(200, 740, 480, 740, 4), + ...line(650, 220, 1000, 220, 4), + ); + break; + default: // Grand Sigil — double circle, cross & diagonals + pegs.push( + ...circle(600, 470, 260, 18, el), + ...circle(600, 470, 130, 10, el), + ...line(600, 230, 600, 340, 2, el), + ...line(600, 610, 600, 720, 2, el), + ...line(350, 470, 460, 470, 2, el), + ...line(740, 470, 850, 470, 2, el), + ...line(300, 240, 420, 330, 2), + ...line(900, 240, 780, 330, 2), + ...line(300, 720, 420, 620, 2), + ...line(900, 720, 780, 620, 2), + ...line(480, 780, 720, 780, 3), + ); + break; + } + return levelFile(settle(pegs)); +} + +// ── Fireball (16-20): rings, rays & bursts ─────────────────────────────────── + +function fireballLevel(v) { + const pegs = []; + switch (v) { + case 0: // X-Ray Vision — concentric rings, orange core + pegs.push( + ...circle(600, 470, 90, 8, el), + ...circle(600, 470, 175, 14, el), + ...circle(600, 470, 260, 20, el), + ...arc(600, 470, 345, Math.PI * -0.35, Math.PI * 1.35, 22), + { x: 600, y: 470, ...el }, + ...line(160, 740, 400, 740, 3), + ...line(800, 740, 1040, 740, 3), + ); + break; + case 1: { // Solar Flare — core + radial rays + pegs.push(...circle(600, 470, 110, 9, el), { x: 600, y: 470, ...el }); + for (let i = 0; i < 8; i++) { + const a = (i * Math.PI * 2) / 8 + Math.PI / 8; + pegs.push(...line( + 600 + 180 * Math.cos(a), 470 + 180 * Math.sin(a), + 600 + 400 * Math.cos(a), 470 + 400 * Math.sin(a), 4, el, + )); + } + break; + } + case 2: // Atomic Age — three overlapping orbit rings + nucleus + pegs.push( + ...circle(600, 470, 60, 6, el), + ...circle(440, 470, 190, 13, el), + ...circle(760, 470, 190, 13, el), + ...circle(600, 320, 190, 13, el), + ...line(200, 760, 440, 760, 3), + ...line(760, 760, 1000, 760, 3), + ); + break; + case 3: { // Meteor Shower — diagonal streaks with cores + for (let i = 0; i < 5; i++) { + const x0 = 140 + i * 210; + pegs.push(...line(x0, 230, x0 + 150, 720, 7, el)); + pegs.push({ x: x0 + 160, y: 760, ...el }); + } + pegs.push(...line(180, 200, 1020, 200, 6)); + break; + } + default: // Supernova — rings + rays + corner shields + pegs.push( + ...circle(600, 470, 90, 8, el), + ...circle(600, 470, 210, 16, el), + ); + for (let i = 0; i < 6; i++) { + const a = (i * Math.PI * 2) / 6; + pegs.push(...line( + 600 + 260 * Math.cos(a), 470 + 260 * Math.sin(a), + 600 + 420 * Math.cos(a), 470 + 420 * Math.sin(a), 3, el, + )); + } + pegs.push( + ...arc(140, 210, 150, 0, Math.PI * 0.5, 4), + ...arc(1060, 210, 150, Math.PI * 0.5, Math.PI, 4), + ...line(430, 780, 770, 780, 4), + ); + break; + } + return levelFile(settle(pegs)); +} + +// ── Victor (21-25): boards & lattices ──────────────────────────────────────── + +function victorLevel(v) { + const pegs = []; + switch (v) { + case 0: // Opening Move — light checker rows + pegs.push( + ...grid(220, 300, 6, 3, 150, 150, el), + ...grid(295, 375, 6, 3, 150, 150, el), + ...line(160, 210, 1040, 210, 6), + ); + break; + case 1: { // Knight's Tour — L-shaped clusters + const L = (x, y) => [ + ...line(x, y, x, y + 180, 3, el), + ...line(x, y + 180, x + 190, y + 180, 3, el), + ]; + pegs.push( + ...L(240, 260), ...L(520, 220), ...L(800, 260), + ...L(380, 520), ...L(660, 480), ...L(940, 520), + ...line(160, 760, 460, 760, 4), + ...line(740, 760, 1040, 760, 4), + ); + break; + } + case 2: // Double Gambit — chevrons + for (let i = 0; i < 4; i++) { + const y = 260 + i * 140; + pegs.push( + ...line(240, y, 600, y + 90, 6, el), + ...line(600, y + 90, 960, y, 6, el), + ); + } + break; + case 3: // Fortress — walls, towers & courtyard + pegs.push( + ...line(220, 260, 980, 260, 9, el), + ...line(220, 700, 980, 700, 9, el), + ...line(220, 330, 220, 630, 4, el), + ...line(475, 330, 475, 630, 4, el), + ...line(725, 330, 725, 630, 4, el), + ...line(980, 330, 980, 630, 4, el), + ...grid(330, 400, 2, 2, 100, 130, el), + ...grid(580, 400, 2, 2, 100, 130, el), + ...grid(830, 400, 2, 2, 100, 130, el), + ); + break; + default: // Checkmate — the dense diagonal lattice + pegs.push( + ...grid(180, 250, 8, 5, 120, 120, el), + ...grid(240, 310, 8, 5, 120, 120, el), + ...line(160, 210, 1040, 210, 8), + ); + break; + } return levelFile(settle(pegs)); } // ── Manifest + write ───────────────────────────────────────────────────────── -const LEVELS = [ - { level: 1, name: 'Tea Time', masterId: 'ethel', powerId: 'superguide', file: 'level-001.json', background: 'parlor', build: level1 }, - { level: 2, name: 'Fetch!', masterId: 'kona', powerId: 'multiball', file: 'level-002.json', background: 'park', build: level2 }, - { level: 3, name: 'Hocus Pocus', masterId: 'zanthor', powerId: 'spaceblast', file: 'level-003.json', background: 'arcana', build: level3 }, - { level: 4, name: 'X-Ray Vision', masterId: 'fireball', powerId: 'fireball', file: 'level-004.json', background: 'lab', build: level4 }, - { level: 5, name: 'Checkmate', masterId: 'victor', powerId: 'zenball', file: 'level-005.json', background: 'study', build: level5 }, +const BLOCKS = [ + { + masterId: 'ethel', powerId: 'superguide', background: 'parlor', build: ethelLevel, + names: ['Tea Time', 'Fine China', 'Doily Drop', 'Lace & Grace', "Grandma's Attic"], + }, + { + masterId: 'kona', powerId: 'multiball', background: 'park', build: konaLevel, + names: ['Fetch!', 'Paw Prints', 'Buried Bones', 'Squeaky Toy', 'Best in Show'], + }, + { + masterId: 'zanthor', powerId: 'spaceblast', background: 'arcana', build: zanthorLevel, + names: ['Hocus Pocus', 'Crescent Moon', 'Crystal Ball', 'Twin Stars', 'Grand Sigil'], + }, + { + masterId: 'fireball', powerId: 'fireball', background: 'lab', build: fireballLevel, + names: ['X-Ray Vision', 'Solar Flare', 'Atomic Age', 'Meteor Shower', 'Supernova'], + }, + { + masterId: 'victor', powerId: 'zenball', background: 'study', build: victorLevel, + names: ['Opening Move', "Knight's Tour", 'Double Gambit', 'Fortress', 'Checkmate'], + }, ]; mkdirSync(OUT_DIR, { recursive: true }); -for (const def of LEVELS) { - const data = def.build(); - const eligible = data.pegs.filter((p) => p.orangeEligible).length; - if (eligible < data.orangeCount) { - throw new Error(`${def.file}: only ${eligible} orange-eligible pegs (< ${data.orangeCount})`); +const manifestLevels = []; +let levelNo = 0; +for (const block of BLOCKS) { + for (let v = 0; v < 5; v++) { + levelNo++; + const file = `level-${String(levelNo).padStart(3, '0')}.json`; + const data = block.build(v); + const eligible = data.pegs.filter((p) => p.orangeEligible).length; + if (eligible < data.orangeCount) { + throw new Error(`${file} (${block.names[v]}): only ${eligible} orange-eligible pegs (< ${data.orangeCount})`); + } + writeFileSync(join(OUT_DIR, file), `${JSON.stringify(data, null, 2)}\n`); + console.log(`${file}: ${block.names[v]} [${block.masterId}] — ${data.pegs.length} pegs (${eligible} orange-eligible)`); + manifestLevels.push({ + level: levelNo, + name: block.names[v], + masterId: block.masterId, + powerId: block.powerId, + file, + background: block.background, + }); } - writeFileSync(join(OUT_DIR, def.file), `${JSON.stringify(data, null, 2)}\n`); - console.log(`${def.file}: ${data.pegs.length} pegs (${eligible} orange-eligible)`); } -const manifest = { - version: 1, - levels: LEVELS.map(({ build, ...entry }) => entry), -}; +const manifest = { version: 1, levels: manifestLevels }; writeFileSync(join(OUT_DIR, 'levels.json'), `${JSON.stringify(manifest, null, 2)}\n`); console.log(`levels.json: ${manifest.levels.length} levels`); diff --git a/tools/verifyPeggle.js b/tools/verifyPeggle.js index c64e3ba..d9af1c1 100644 --- a/tools/verifyPeggle.js +++ b/tools/verifyPeggle.js @@ -453,6 +453,24 @@ console.log('― data lint'); check('manifest has levels', Array.isArray(manifest.levels) && manifest.levels.length >= 5); check('manifest levels sequential from 1', manifest.levels.every((l, i) => l.level === i + 1)); + + // Friend blocks: 5 consecutive levels per master, in the expected order, + // one power per block. The intro screen keys off masterId changing between + // consecutive entries, so block integrity matters. + const BLOCK_ORDER = ['ethel', 'kona', 'zanthor', 'fireball', 'victor']; + check('25 levels in 5 friend blocks', manifest.levels.length === 25); + let blocksOk = true; + for (let b = 0; b < BLOCK_ORDER.length; b++) { + const block = manifest.levels.slice(b * 5, b * 5 + 5); + if (!block.every((l) => l.masterId === BLOCK_ORDER[b])) blocksOk = false; + if (new Set(block.map((l) => l.powerId)).size !== 1) blocksOk = false; + } + check('blocks of 5 share master+power in order', blocksOk); + const introLevels = manifest.levels + .filter((l, i) => i === 0 || manifest.levels[i - 1].masterId !== l.masterId) + .map((l) => l.level); + check('masterId-change rule marks intros at 1,6,11,16,21', introLevels.join(',') === '1,6,11,16,21', introLevels.join(',')); + check('level names unique', new Set(manifest.levels.map((l) => l.name)).size === manifest.levels.length); check('manifest masters exist in opponents.json', manifest.levels.every((l) => roster.has(l.masterId)), manifest.levels.filter((l) => !roster.has(l.masterId)).map((l) => l.masterId).join(',')); @@ -504,7 +522,7 @@ console.log('― soak'); let invariantOk = true; for (const entry of manifest.levels) { const lvl = JSON.parse(readFileSync(join(DATA_DIR, entry.file), 'utf8')); - for (let g = 0; g < 6; g++) { + for (let g = 0; g < 3; g++) { games++; const st = createRound({ ...lvl, powerId: entry.powerId }, { seed: g * 977 + entry.level }); const rng = mulberry32(g * 31 + 7);