diff --git a/assets/gamedata/peggle/level-026.json b/assets/gamedata/peggle/level-026.json new file mode 100644 index 0000000..398af90 --- /dev/null +++ b/assets/gamedata/peggle/level-026.json @@ -0,0 +1,285 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 350, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 450, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 500, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 650, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 750, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 350, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 450, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 500, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 650, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 750, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 350, + "y": 315, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 350, + "y": 369, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 350, + "y": 423, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 350, + "y": 477, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 350, + "y": 531, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 350, + "y": 585, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 315, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 369, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 423, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 477, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 531, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 585, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 280, + "y": 180 + }, + { + "x": 920, + "y": 180 + } + ], + "bends": [ + 35 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 280, + "y": 725 + }, + { + "x": 920, + "y": 725 + } + ], + "bends": [ + -35 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-027.json b/assets/gamedata/peggle/level-027.json new file mode 100644 index 0000000..29a4515 --- /dev/null +++ b/assets/gamedata/peggle/level-027.json @@ -0,0 +1,322 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 150, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 219, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 288, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 358, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 427, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 496, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 565, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 635, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 704, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 773, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 842, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 912, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 981, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1050, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 185, + "y": 745, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 254, + "y": 745, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 323, + "y": 745, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 393, + "y": 745, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 462, + "y": 745, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 531, + "y": 745, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 745, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 669, + "y": 745, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 738, + "y": 745, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 808, + "y": 745, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 877, + "y": 745, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 946, + "y": 745, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1015, + "y": 745, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 150, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 150, + "y": 310, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 150, + "y": 380, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 150, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 150, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1050, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1050, + "y": 310, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1050, + "y": 380, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1050, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1050, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 220, + "y": 250 + }, + { + "x": 980, + "y": 250 + } + ], + "bends": [ + 55 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 220, + "y": 380 + }, + { + "x": 980, + "y": 380 + } + ], + "bends": [ + 55 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 220, + "y": 510 + }, + { + "x": 980, + "y": 510 + } + ], + "bends": [ + 55 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-028.json b/assets/gamedata/peggle/level-028.json new file mode 100644 index 0000000..87b8512 --- /dev/null +++ b/assets/gamedata/peggle/level-028.json @@ -0,0 +1,262 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 210, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 275, + "y": 242, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 340, + "y": 289, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 405, + "y": 336, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 470, + "y": 383, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 535, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 478, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 665, + "y": 525, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 730, + "y": 572, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 795, + "y": 619, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 860, + "y": 666, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 925, + "y": 713, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 990, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 990, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 925, + "y": 242, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 860, + "y": 289, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 795, + "y": 336, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 730, + "y": 383, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 665, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 535, + "y": 525, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 470, + "y": 572, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 405, + "y": 619, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 340, + "y": 666, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 275, + "y": 713, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 210, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 570, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 500, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 160, + "y": 230, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 1040, + "y": 230, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 160, + "y": 720, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 1040, + "y": 720, + "shape": "circle", + "r": 16, + "orangeEligible": false + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 430, + "y": 800 + }, + { + "x": 770, + "y": 800 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-029.json b/assets/gamedata/peggle/level-029.json new file mode 100644 index 0000000..2d9f641 --- /dev/null +++ b/assets/gamedata/peggle/level-029.json @@ -0,0 +1,292 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 715, + "y": 480, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 538, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 658, + "y": 580, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 595, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 543, + "y": 580, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 500, + "y": 538, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 485, + "y": 480, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 500, + "y": 423, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 543, + "y": 380, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 365, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 658, + "y": 380, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 422, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 658, + "y": 480, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 629, + "y": 530, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 571, + "y": 530, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 542, + "y": 480, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 571, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 629, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 480, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 407, + "y": 410, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 437, + "y": 355, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 482, + "y": 312, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 538, + "y": 284, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 275, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 662, + "y": 284, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 718, + "y": 312, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 763, + "y": 355, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 793, + "y": 410, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 786, + "y": 567, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 741, + "y": 629, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 676, + "y": 671, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 685, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 524, + "y": 671, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 459, + "y": 629, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 414, + "y": 567, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 140, + "y": 480 + }, + { + "x": 420, + "y": 480 + } + ], + "bends": [ + 25 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 780, + "y": 480 + }, + { + "x": 1060, + "y": 480 + } + ], + "bends": [ + 25 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-030.json b/assets/gamedata/peggle/level-030.json new file mode 100644 index 0000000..67640c6 --- /dev/null +++ b/assets/gamedata/peggle/level-030.json @@ -0,0 +1,362 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 260, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 360, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 460, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 560, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 660, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 760, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 860, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 960, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 260, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 360, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 460, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 560, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 660, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 760, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 860, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 960, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 260, + "y": 620, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 360, + "y": 620, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 460, + "y": 620, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 560, + "y": 620, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 660, + "y": 620, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 760, + "y": 620, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 860, + "y": 620, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 960, + "y": 620, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 320, + "y": 320, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 420, + "y": 320, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 320, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 620, + "y": 320, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 720, + "y": 320, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 820, + "y": 320, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 920, + "y": 320, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 320, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 420, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 620, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 720, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 820, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 920, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 320, + "y": 720, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 420, + "y": 720, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 720, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 620, + "y": 720, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 720, + "y": 720, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 820, + "y": 720, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 920, + "y": 720, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 190, + "y": 195 + }, + { + "x": 190, + "y": 760 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 1010, + "y": 195 + }, + { + "x": 1010, + "y": 760 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-031.json b/assets/gamedata/peggle/level-031.json new file mode 100644 index 0000000..610767d --- /dev/null +++ b/assets/gamedata/peggle/level-031.json @@ -0,0 +1,276 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 170, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 228, + "y": 267, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 287, + "y": 283, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 345, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 403, + "y": 317, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 462, + "y": 333, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 350, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 690, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 748, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 807, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 865, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 923, + "y": 280, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 982, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1040, + "y": 320, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 150, + "y": 530, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 208, + "y": 517, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 267, + "y": 503, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 325, + "y": 490, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 383, + "y": 477, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 442, + "y": 463, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 500, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 660, + "y": 500, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 716, + "y": 511, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 771, + "y": 523, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 827, + "y": 534, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 883, + "y": 546, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 939, + "y": 557, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 994, + "y": 569, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1050, + "y": 580, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 300, + "y": 690, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 360, + "y": 690, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 420, + "y": 690, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 750, + "y": 715, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 810, + "y": 715, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 870, + "y": 715, + "shape": "circle", + "r": 16, + "orangeEligible": false + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 200, + "y": 790 + }, + { + "x": 1000, + "y": 790 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-032.json b/assets/gamedata/peggle/level-032.json new file mode 100644 index 0000000..dc60b38 --- /dev/null +++ b/assets/gamedata/peggle/level-032.json @@ -0,0 +1,251 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 150, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 250, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 350, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 450, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 650, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 750, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1050, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 150, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 250, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 350, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 450, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 650, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 750, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1050, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 345, + "y": 580, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 314, + "y": 623, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 264, + "y": 606, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 264, + "y": 554, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 314, + "y": 537, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 925, + "y": 605, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 894, + "y": 648, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 844, + "y": 631, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 844, + "y": 579, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 894, + "y": 562, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 110, + "y": 320 + }, + { + "x": 420, + "y": 460 + }, + { + "x": 800, + "y": 370 + }, + { + "x": 1090, + "y": 500 + } + ], + "bends": [ + 100, + -100, + 100 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-033.json b/assets/gamedata/peggle/level-033.json new file mode 100644 index 0000000..23ae92e --- /dev/null +++ b/assets/gamedata/peggle/level-033.json @@ -0,0 +1,267 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 375, + "y": 560, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 384, + "y": 497, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 411, + "y": 438, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 453, + "y": 390, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 507, + "y": 355, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 568, + "y": 337, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 632, + "y": 337, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 693, + "y": 355, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 747, + "y": 390, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 789, + "y": 438, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 816, + "y": 497, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 825, + "y": 560, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 448, + "y": 560, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 463, + "y": 494, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 505, + "y": 441, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 566, + "y": 412, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 634, + "y": 412, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 695, + "y": 441, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 737, + "y": 494, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 752, + "y": 560, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 518, + "y": 560, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 542, + "y": 502, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 478, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 658, + "y": 502, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 682, + "y": 560, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 330, + "y": 590, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 407, + "y": 590, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 484, + "y": 590, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 561, + "y": 590, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 639, + "y": 590, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 716, + "y": 590, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 793, + "y": 590, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 870, + "y": 590, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 230, + "y": 705 + }, + { + "x": 600, + "y": 705 + }, + { + "x": 970, + "y": 705 + } + ], + "bends": [ + 45, + -45 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-034.json b/assets/gamedata/peggle/level-034.json new file mode 100644 index 0000000..87bae0c --- /dev/null +++ b/assets/gamedata/peggle/level-034.json @@ -0,0 +1,367 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 150, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 213, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 275, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 338, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 500, + "y": 225, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 564, + "y": 225, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 628, + "y": 225, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 692, + "y": 225, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 756, + "y": 225, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 820, + "y": 225, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 890, + "y": 290, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 952, + "y": 290, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1013, + "y": 290, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1075, + "y": 290, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 200, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 264, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 328, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 392, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 456, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 620, + "y": 455, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 683, + "y": 455, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 747, + "y": 455, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 810, + "y": 455, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 873, + "y": 455, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 937, + "y": 455, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 455, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 150, + "y": 610, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 210, + "y": 610, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 270, + "y": 610, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 330, + "y": 610, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 390, + "y": 610, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 450, + "y": 610, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 560, + "y": 645, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 617, + "y": 645, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 673, + "y": 645, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 730, + "y": 645, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 787, + "y": 645, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 843, + "y": 645, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 900, + "y": 645, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 300, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 400, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 500, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 600, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 700, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 800, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 900, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": false + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 985, + "y": 615 + }, + { + "x": 1080, + "y": 735 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-035.json b/assets/gamedata/peggle/level-035.json new file mode 100644 index 0000000..ccdf76f --- /dev/null +++ b/assets/gamedata/peggle/level-035.json @@ -0,0 +1,267 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 470, + "y": 395, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 491, + "y": 350, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 528, + "y": 316, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 575, + "y": 297, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 625, + "y": 297, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 672, + "y": 316, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 709, + "y": 350, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 730, + "y": 395, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 403, + "y": 358, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 429, + "y": 308, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 468, + "y": 267, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 517, + "y": 237, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 572, + "y": 222, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 628, + "y": 222, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 683, + "y": 237, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 732, + "y": 267, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 771, + "y": 308, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 797, + "y": 358, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 250, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 350, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 450, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 650, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 750, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 300, + "y": 765, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 765, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 500, + "y": 765, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 765, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 765, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 765, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 900, + "y": 765, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 150, + "y": 565 + }, + { + "x": 600, + "y": 460 + }, + { + "x": 1050, + "y": 565 + } + ], + "bends": [ + 30, + 30 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-036.json b/assets/gamedata/peggle/level-036.json new file mode 100644 index 0000000..7b30848 --- /dev/null +++ b/assets/gamedata/peggle/level-036.json @@ -0,0 +1,215 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 650, + "y": 245, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 625, + "y": 288, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 575, + "y": 288, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 245, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 575, + "y": 202, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 625, + "y": 202, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 335, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 408, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 482, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 555, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 480, + "y": 335, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 540, + "y": 335, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 660, + "y": 335, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 720, + "y": 335, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 750, + "y": 540, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 720, + "y": 584, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 677, + "y": 616, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 627, + "y": 633, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 573, + "y": 633, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 523, + "y": 616, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 480, + "y": 584, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 450, + "y": 540, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 415, + "y": 505, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 785, + "y": 505, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 140, + "y": 660 + }, + { + "x": 460, + "y": 660 + } + ], + "bends": [ + 40 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 740, + "y": 660 + }, + { + "x": 1060, + "y": 660 + } + ], + "bends": [ + 40 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-037.json b/assets/gamedata/peggle/level-037.json new file mode 100644 index 0000000..8f67bd6 --- /dev/null +++ b/assets/gamedata/peggle/level-037.json @@ -0,0 +1,241 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 600, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 271, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 343, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 414, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 486, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 557, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 629, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 650, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 298, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 750, + "y": 357, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 415, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 473, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 900, + "y": 532, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 590, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 660, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 730, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 870, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 940, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 502, + "y": 358, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 454, + "y": 416, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 406, + "y": 474, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 358, + "y": 532, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 310, + "y": 590, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 320, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 393, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 467, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 540, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 300, + "y": 725 + }, + { + "x": 900, + "y": 725 + } + ], + "bends": [ + 45 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-038.json b/assets/gamedata/peggle/level-038.json new file mode 100644 index 0000000..a3ccc4a --- /dev/null +++ b/assets/gamedata/peggle/level-038.json @@ -0,0 +1,276 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 672, + "y": 265, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 651, + "y": 316, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 337, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 549, + "y": 316, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 528, + "y": 265, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 549, + "y": 214, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 193, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 651, + "y": 214, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 380, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 460, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 540, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 620, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 495, + "y": 404, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 438, + "y": 463, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 381, + "y": 523, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 324, + "y": 582, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 267, + "y": 641, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 210, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 705, + "y": 404, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 762, + "y": 463, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 819, + "y": 523, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 876, + "y": 582, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 933, + "y": 641, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 990, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 470, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 530, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 670, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 730, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 320, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 420, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 680, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 780, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 880, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 200, + "y": 780 + }, + { + "x": 1000, + "y": 780 + } + ], + "bends": [ + 30 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-039.json b/assets/gamedata/peggle/level-039.json new file mode 100644 index 0000000..28e040a --- /dev/null +++ b/assets/gamedata/peggle/level-039.json @@ -0,0 +1,141 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 238, + "y": 230, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 280, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 322, + "y": 230, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 518, + "y": 205, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 602, + "y": 205, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 798, + "y": 235, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 840, + "y": 205, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 882, + "y": 235, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1055, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 120, + "y": 360 + }, + { + "x": 600, + "y": 360 + }, + { + "x": 1080, + "y": 360 + } + ], + "bends": [ + 70, + -70 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 120, + "y": 530 + }, + { + "x": 600, + "y": 530 + }, + { + "x": 1080, + "y": 530 + } + ], + "bends": [ + -70, + 70 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 120, + "y": 700 + }, + { + "x": 600, + "y": 700 + }, + { + "x": 1080, + "y": 700 + } + ], + "bends": [ + 70, + -70 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-040.json b/assets/gamedata/peggle/level-040.json new file mode 100644 index 0000000..cce3e34 --- /dev/null +++ b/assets/gamedata/peggle/level-040.json @@ -0,0 +1,231 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 300, + "y": 465, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 386, + "y": 465, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 471, + "y": 465, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 557, + "y": 465, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 643, + "y": 465, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 729, + "y": 465, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 814, + "y": 465, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 900, + "y": 465, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 450, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 450, + "y": 272, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 450, + "y": 343, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 450, + "y": 415, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 750, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 750, + "y": 272, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 750, + "y": 343, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 750, + "y": 415, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 515, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 535, + "y": 315, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 515, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 815, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 835, + "y": 315, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 815, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 280, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 930, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 250, + "y": 520 + }, + { + "x": 950, + "y": 520 + } + ], + "bends": [ + 120 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 180, + "y": 720 + }, + { + "x": 480, + "y": 720 + } + ], + "bends": [ + 35 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 720, + "y": 720 + }, + { + "x": 1020, + "y": 720 + } + ], + "bends": [ + 35 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-041.json b/assets/gamedata/peggle/level-041.json new file mode 100644 index 0000000..51c147c --- /dev/null +++ b/assets/gamedata/peggle/level-041.json @@ -0,0 +1,276 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 250, + "y": 720, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 204, + "y": 672, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 250, + "y": 660, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 296, + "y": 672, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 450, + "y": 595, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 404, + "y": 547, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 450, + "y": 535, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 496, + "y": 547, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 330, + "y": 465, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 284, + "y": 417, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 330, + "y": 405, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 376, + "y": 417, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 510, + "y": 335, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 464, + "y": 287, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 510, + "y": 275, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 556, + "y": 287, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 390, + "y": 255, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 344, + "y": 207, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 390, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 436, + "y": 207, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 280, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 385, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 490, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 595, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 230, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 332, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 434, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 536, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 638, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1050, + "y": 330, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1050, + "y": 437, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1050, + "y": 543, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1050, + "y": 650, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 640, + "y": 775 + }, + { + "x": 1060, + "y": 775 + } + ], + "bends": [ + 20 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-042.json b/assets/gamedata/peggle/level-042.json new file mode 100644 index 0000000..672a481 --- /dev/null +++ b/assets/gamedata/peggle/level-042.json @@ -0,0 +1,248 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 502, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 476, + "y": 712, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 409, + "y": 750, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 334, + "y": 737, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 285, + "y": 678, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 285, + "y": 602, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 334, + "y": 543, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 409, + "y": 530, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 476, + "y": 568, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 445, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 390, + "y": 695, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 335, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 390, + "y": 585, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 960, + "y": 590, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 931, + "y": 661, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 860, + "y": 690, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 789, + "y": 661, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 760, + "y": 590, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 789, + "y": 519, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 860, + "y": 490, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 931, + "y": 519, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 860, + "y": 590, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 350, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 430, + "y": 380, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 300, + "y": 315, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 830, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 910, + "y": 350, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 770, + "y": 265, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 330, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 150, + "y": 800 + }, + { + "x": 1050, + "y": 800 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-043.json b/assets/gamedata/peggle/level-043.json new file mode 100644 index 0000000..6f80051 --- /dev/null +++ b/assets/gamedata/peggle/level-043.json @@ -0,0 +1,304 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 280, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 366, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 451, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 537, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 623, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 709, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 794, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 880, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 361, + "y": 415, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 320, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 279, + "y": 415, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 501, + "y": 415, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 460, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 419, + "y": 415, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 641, + "y": 415, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 559, + "y": 415, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 781, + "y": 415, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 740, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 699, + "y": 415, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 921, + "y": 415, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 880, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 839, + "y": 415, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1032, + "y": 620, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1005, + "y": 676, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 944, + "y": 690, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 895, + "y": 651, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 895, + "y": 589, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 944, + "y": 550, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1005, + "y": 564, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 935, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 985, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 150, + "y": 650, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 213, + "y": 676, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 275, + "y": 703, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 338, + "y": 729, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 755, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 120, + "y": 610, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 440, + "y": 785, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 140, + "y": 330 + }, + { + "x": 260, + "y": 215 + } + ], + "bends": [ + -25 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-044.json b/assets/gamedata/peggle/level-044.json new file mode 100644 index 0000000..1864e4f --- /dev/null +++ b/assets/gamedata/peggle/level-044.json @@ -0,0 +1,290 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 350, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 392, + "y": 692, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 434, + "y": 624, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 476, + "y": 556, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 518, + "y": 488, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 560, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 808, + "y": 692, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 766, + "y": 624, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 724, + "y": 556, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 682, + "y": 488, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 640, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 491, + "y": 344, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 518, + "y": 308, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 556, + "y": 283, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 275, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 644, + "y": 283, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 682, + "y": 308, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 709, + "y": 344, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 435, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 466, + "y": 261, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 505, + "y": 230, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 551, + "y": 211, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 205, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 649, + "y": 211, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 695, + "y": 230, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 734, + "y": 261, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 765, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 150, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 240, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 420, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 510, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 690, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 780, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 960, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1050, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 480, + "y": 170 + }, + { + "x": 720, + "y": 170 + } + ], + "bends": [ + -20 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-045.json b/assets/gamedata/peggle/level-045.json new file mode 100644 index 0000000..ebd7e9d --- /dev/null +++ b/assets/gamedata/peggle/level-045.json @@ -0,0 +1,227 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 358, + "y": 620, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 329, + "y": 670, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 271, + "y": 670, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 242, + "y": 620, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 271, + "y": 570, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 329, + "y": 570, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 300, + "y": 620, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 420, + "y": 530, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 509, + "y": 483, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 597, + "y": 436, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 686, + "y": 389, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 774, + "y": 341, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 863, + "y": 294, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 951, + "y": 247, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1040, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 655, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 613, + "y": 599, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 707, + "y": 543, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 488, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 893, + "y": 432, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 987, + "y": 376, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1080, + "y": 320, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 395, + "y": 455, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 443, + "y": 495, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 476, + "y": 549, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 490, + "y": 610, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 483, + "y": 672, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 456, + "y": 729, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 150, + "y": 785 + }, + { + "x": 1050, + "y": 785 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-046.json b/assets/gamedata/peggle/level-046.json new file mode 100644 index 0000000..8f61a0a --- /dev/null +++ b/assets/gamedata/peggle/level-046.json @@ -0,0 +1,246 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 476, + "y": 590, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 453, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 407, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 384, + "y": 590, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 407, + "y": 550, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 453, + "y": 550, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 816, + "y": 590, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 793, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 747, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 724, + "y": 590, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 747, + "y": 550, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 793, + "y": 550, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 695, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 667, + "y": 367, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 395, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 533, + "y": 367, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 505, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 533, + "y": 233, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 205, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 667, + "y": 233, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 200, + "y": 745, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 300, + "y": 745, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 745, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 500, + "y": 745, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 745, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 745, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 745, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 900, + "y": 745, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 745, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 290, + "y": 490 + }, + { + "x": 600, + "y": 465 + }, + { + "x": 910, + "y": 490 + } + ], + "bends": [ + -22, + -22 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-047.json b/assets/gamedata/peggle/level-047.json new file mode 100644 index 0000000..dc26380 --- /dev/null +++ b/assets/gamedata/peggle/level-047.json @@ -0,0 +1,176 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 225, + "y": 207, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 254, + "y": 233, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 269, + "y": 269, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 931, + "y": 269, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 946, + "y": 233, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 975, + "y": 207, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 685, + "y": 335, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 653, + "y": 401, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 581, + "y": 418, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 523, + "y": 372, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 523, + "y": 298, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 581, + "y": 252, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 653, + "y": 269, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 450, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 650, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 750, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 180, + "y": 275 + }, + { + "x": 600, + "y": 620 + }, + { + "x": 1020, + "y": 275 + } + ], + "bends": [ + 85, + -85 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 265, + "y": 300 + }, + { + "x": 600, + "y": 540 + }, + { + "x": 935, + "y": 300 + } + ], + "bends": [ + 60, + -60 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-048.json b/assets/gamedata/peggle/level-048.json new file mode 100644 index 0000000..89ab33d --- /dev/null +++ b/assets/gamedata/peggle/level-048.json @@ -0,0 +1,297 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 200, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 260, + "y": 224, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 320, + "y": 248, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 380, + "y": 272, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 440, + "y": 296, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 500, + "y": 320, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 438, + "y": 353, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 375, + "y": 385, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 313, + "y": 418, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 250, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 310, + "y": 474, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 370, + "y": 498, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 430, + "y": 522, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 490, + "y": 546, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 570, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 488, + "y": 603, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 425, + "y": 635, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 363, + "y": 668, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 300, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 940, + "y": 224, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 880, + "y": 248, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 820, + "y": 272, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 760, + "y": 296, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 320, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 763, + "y": 353, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 825, + "y": 385, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 888, + "y": 418, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 890, + "y": 474, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 830, + "y": 498, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 770, + "y": 522, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 710, + "y": 546, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 650, + "y": 570, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 713, + "y": 603, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 775, + "y": 635, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 838, + "y": 668, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 900, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 440, + "y": 775 + }, + { + "x": 760, + "y": 775 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-049.json b/assets/gamedata/peggle/level-049.json new file mode 100644 index 0000000..2fb1b74 --- /dev/null +++ b/assets/gamedata/peggle/level-049.json @@ -0,0 +1,215 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 457, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 495, + "y": 380, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 545, + "y": 354, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 345, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 655, + "y": 354, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 705, + "y": 380, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 743, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 662, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 631, + "y": 314, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 569, + "y": 314, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 538, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 569, + "y": 206, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 631, + "y": 206, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 400, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 480, + "y": 765, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 560, + "y": 765, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 640, + "y": 765, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 720, + "y": 765, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 220, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 220, + "y": 330, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 220, + "y": 400, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 980, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 980, + "y": 330, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 980, + "y": 400, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 140, + "y": 700 + }, + { + "x": 440, + "y": 460 + } + ], + "bends": [ + -55 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 760, + "y": 460 + }, + { + "x": 1060, + "y": 700 + } + ], + "bends": [ + -55 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-050.json b/assets/gamedata/peggle/level-050.json new file mode 100644 index 0000000..1674e12 --- /dev/null +++ b/assets/gamedata/peggle/level-050.json @@ -0,0 +1,211 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 800, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 870, + "y": 365, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 940, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1010, + "y": 495, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1080, + "y": 560, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1080, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1010, + "y": 365, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 870, + "y": 495, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 560, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 594, + "y": 380, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 646, + "y": 366, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 749, + "y": 393, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 787, + "y": 431, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 200, + "y": 770, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 300, + "y": 770, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 770, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 500, + "y": 770, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 770, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 770, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 770, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 900, + "y": 770, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 770, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 940, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 760, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 130, + "y": 190 + }, + { + "x": 460, + "y": 590 + }, + { + "x": 720, + "y": 680 + } + ], + "bends": [ + -75, + -30 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-051.json b/assets/gamedata/peggle/level-051.json new file mode 100644 index 0000000..d83176e --- /dev/null +++ b/assets/gamedata/peggle/level-051.json @@ -0,0 +1,220 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 728, + "y": 330, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 708, + "y": 399, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 653, + "y": 446, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 582, + "y": 457, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 516, + "y": 427, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 477, + "y": 366, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 477, + "y": 294, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 516, + "y": 233, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 653, + "y": 214, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 708, + "y": 261, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 552, + "y": 310, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 648, + "y": 310, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 568, + "y": 415, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 380, + "y": 545, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 468, + "y": 577, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 556, + "y": 609, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 644, + "y": 641, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 732, + "y": 673, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 820, + "y": 705, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 820, + "y": 545, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 732, + "y": 577, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 468, + "y": 673, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 380, + "y": 705, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 330, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 870, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 330, + "y": 730, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 870, + "y": 730, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 300, + "y": 178 + }, + { + "x": 900, + "y": 178 + } + ], + "bends": [ + -22 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-052.json b/assets/gamedata/peggle/level-052.json new file mode 100644 index 0000000..341e7ea --- /dev/null +++ b/assets/gamedata/peggle/level-052.json @@ -0,0 +1,222 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 370, + "y": 330, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 462, + "y": 330, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 554, + "y": 330, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 646, + "y": 330, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 738, + "y": 330, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 830, + "y": 330, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 370, + "y": 480, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 462, + "y": 480, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 554, + "y": 480, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 646, + "y": 480, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 738, + "y": 480, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 830, + "y": 480, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 370, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 462, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 554, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 646, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 738, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 830, + "y": 630, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 720, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 500, + "y": 609, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 498, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 386, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 275, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 210, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 990, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 250, + "y": 290 + }, + { + "x": 250, + "y": 700 + } + ], + "bends": [ + 45 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 950, + "y": 290 + }, + { + "x": 950, + "y": 700 + } + ], + "bends": [ + -45 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-053.json b/assets/gamedata/peggle/level-053.json new file mode 100644 index 0000000..5e926b4 --- /dev/null +++ b/assets/gamedata/peggle/level-053.json @@ -0,0 +1,250 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "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": 440, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 680, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 760, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 480, + "y": 580, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 560, + "y": 580, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 640, + "y": 580, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 720, + "y": 580, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 680, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 560, + "y": 460, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 640, + "y": 460, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 405, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 428, + "y": 400, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 453, + "y": 335, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 501, + "y": 285, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 565, + "y": 258, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 635, + "y": 258, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 699, + "y": 285, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 747, + "y": 335, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 772, + "y": 400, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 210, + "y": 280 + }, + { + "x": 210, + "y": 700 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 990, + "y": 280 + }, + { + "x": 990, + "y": 700 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-054.json b/assets/gamedata/peggle/level-054.json new file mode 100644 index 0000000..3fa3b8e --- /dev/null +++ b/assets/gamedata/peggle/level-054.json @@ -0,0 +1,339 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 645, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 623, + "y": 489, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 578, + "y": 489, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 555, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 578, + "y": 411, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 623, + "y": 411, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 682, + "y": 279, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 749, + "y": 332, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 785, + "y": 408, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 785, + "y": 492, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 749, + "y": 568, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 682, + "y": 621, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 518, + "y": 621, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 451, + "y": 568, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 415, + "y": 492, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 415, + "y": 408, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 451, + "y": 332, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 518, + "y": 279, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 638, + "y": 358, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 692, + "y": 412, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 692, + "y": 488, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 638, + "y": 542, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 562, + "y": 542, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 508, + "y": 488, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 508, + "y": 412, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 562, + "y": 358, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 655, + "y": 316, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 734, + "y": 395, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 734, + "y": 505, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 655, + "y": 584, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 545, + "y": 584, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 466, + "y": 505, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 466, + "y": 395, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 545, + "y": 316, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 691, + "y": 230, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 820, + "y": 359, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 820, + "y": 541, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 691, + "y": 670, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 509, + "y": 670, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 380, + "y": 541, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 380, + "y": 359, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 509, + "y": 230, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 250, + "y": 762 + }, + { + "x": 950, + "y": 762 + } + ], + "bends": [ + 30 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-055.json b/assets/gamedata/peggle/level-055.json new file mode 100644 index 0000000..350ddaa --- /dev/null +++ b/assets/gamedata/peggle/level-055.json @@ -0,0 +1,288 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 460, + "y": 340, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 471, + "y": 286, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 501, + "y": 241, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 546, + "y": 211, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 654, + "y": 211, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 699, + "y": 241, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 729, + "y": 286, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 740, + "y": 340, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 548, + "y": 335, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 652, + "y": 335, + "shape": "circle", + "r": 16, + "orangeEligible": false + }, + { + "x": 190, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 255, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 160, + "y": 400, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1010, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 945, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1040, + "y": 400, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 150, + "y": 785, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 250, + "y": 785, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 350, + "y": 785, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 450, + "y": 785, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 785, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 650, + "y": 785, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 750, + "y": 785, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 785, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 785, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1050, + "y": 785, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 480, + "y": 425 + }, + { + "x": 420, + "y": 585 + }, + { + "x": 470, + "y": 725 + } + ], + "bends": [ + 55, + -55 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 560, + "y": 445 + }, + { + "x": 560, + "y": 610 + }, + { + "x": 520, + "y": 740 + } + ], + "bends": [ + -45, + 45 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 640, + "y": 445 + }, + { + "x": 640, + "y": 610 + }, + { + "x": 680, + "y": 740 + } + ], + "bends": [ + 45, + -45 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 720, + "y": 425 + }, + { + "x": 780, + "y": 585 + }, + { + "x": 730, + "y": 725 + } + ], + "bends": [ + -55, + 55 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-056.json b/assets/gamedata/peggle/level-056.json new file mode 100644 index 0000000..b44a6c9 --- /dev/null +++ b/assets/gamedata/peggle/level-056.json @@ -0,0 +1,276 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 462, + "y": 320, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 436, + "y": 392, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 369, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 294, + "y": 417, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 245, + "y": 358, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 245, + "y": 282, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 294, + "y": 223, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 369, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 436, + "y": 248, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 350, + "y": 320, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 912, + "y": 285, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 881, + "y": 349, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 812, + "y": 365, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 756, + "y": 321, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 756, + "y": 249, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 812, + "y": 205, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 881, + "y": 221, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 750, + "y": 610, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 726, + "y": 691, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 662, + "y": 746, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 579, + "y": 758, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 502, + "y": 723, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 456, + "y": 652, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 456, + "y": 568, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 502, + "y": 497, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 579, + "y": 462, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 662, + "y": 474, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 726, + "y": 529, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 676, + "y": 610, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 638, + "y": 676, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 562, + "y": 676, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 524, + "y": 610, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 562, + "y": 544, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 638, + "y": 544, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 610, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 150, + "y": 795 + }, + { + "x": 1050, + "y": 795 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-057.json b/assets/gamedata/peggle/level-057.json new file mode 100644 index 0000000..4c42788 --- /dev/null +++ b/assets/gamedata/peggle/level-057.json @@ -0,0 +1,322 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 250, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 390, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 530, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 670, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 810, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 250, + "y": 320, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 390, + "y": 320, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 530, + "y": 320, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 670, + "y": 320, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 810, + "y": 320, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 320, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 250, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 390, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 530, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 670, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 810, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 320, + "y": 270, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 460, + "y": 270, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 270, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 740, + "y": 270, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 880, + "y": 270, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 320, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 460, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 740, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 880, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 228, + "y": 690, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 249, + "y": 639, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 300, + "y": 618, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 351, + "y": 639, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 372, + "y": 690, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 528, + "y": 690, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 549, + "y": 639, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 618, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 651, + "y": 639, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 672, + "y": 690, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 828, + "y": 690, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 849, + "y": 639, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 900, + "y": 618, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 951, + "y": 639, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 972, + "y": 690, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 775, + "shape": "circle", + "r": 16, + "orangeEligible": false + } + ], + "walls": [], + "moving": [], + "curves": [] +} diff --git a/assets/gamedata/peggle/level-058.json b/assets/gamedata/peggle/level-058.json new file mode 100644 index 0000000..2a00034 --- /dev/null +++ b/assets/gamedata/peggle/level-058.json @@ -0,0 +1,269 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 500, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 513, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 213, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 650, + "y": 213, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 687, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 380, + "y": 330, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 453, + "y": 330, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 527, + "y": 330, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 330, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 673, + "y": 330, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 747, + "y": 330, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 820, + "y": 330, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 390, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 492, + "y": 464, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 464, + "y": 538, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 436, + "y": 612, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 408, + "y": 686, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 380, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 680, + "y": 390, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 708, + "y": 464, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 736, + "y": 538, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 764, + "y": 612, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 792, + "y": 686, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 820, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 500, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 555, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 645, + "y": 650, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 730, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 180, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1020, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 150, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1050, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 430, + "y": 800 + }, + { + "x": 770, + "y": 800 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-059.json b/assets/gamedata/peggle/level-059.json new file mode 100644 index 0000000..6d60033 --- /dev/null +++ b/assets/gamedata/peggle/level-059.json @@ -0,0 +1,273 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 383, + "y": 392, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 408, + "y": 332, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 450, + "y": 282, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 505, + "y": 246, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 567, + "y": 227, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 633, + "y": 227, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 695, + "y": 246, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 750, + "y": 282, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 792, + "y": 332, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 817, + "y": 392, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 250, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 350, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 450, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 650, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 750, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 480, + "y": 409, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 509, + "y": 348, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 566, + "y": 313, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 634, + "y": 313, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 691, + "y": 348, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 720, + "y": 409, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 350, + "y": 505, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 450, + "y": 505, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 505, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 650, + "y": 505, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 750, + "y": 505, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 505, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 400, + "y": 580 + }, + { + "x": 355, + "y": 765 + } + ], + "bends": [ + 20 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 600, + "y": 585 + }, + { + "x": 600, + "y": 785 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 800, + "y": 580 + }, + { + "x": 845, + "y": 765 + } + ], + "bends": [ + -20 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-060.json b/assets/gamedata/peggle/level-060.json new file mode 100644 index 0000000..9cb271d --- /dev/null +++ b/assets/gamedata/peggle/level-060.json @@ -0,0 +1,220 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 832, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 814, + "y": 539, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 764, + "y": 614, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 689, + "y": 664, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 682, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 511, + "y": 664, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 436, + "y": 614, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 386, + "y": 539, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 368, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 386, + "y": 361, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 436, + "y": 286, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 511, + "y": 236, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 218, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 689, + "y": 236, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 764, + "y": 286, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 814, + "y": 361, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 380, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 655, + "y": 345, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 560, + "y": 525, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 478, + "y": 462, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 200, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 150, + "y": 660, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1050, + "y": 660, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 320, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 880, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 150, + "y": 275 + }, + { + "x": 450, + "y": 175 + } + ], + "bends": [ + -20 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-061.json b/assets/gamedata/peggle/level-061.json new file mode 100644 index 0000000..983a869 --- /dev/null +++ b/assets/gamedata/peggle/level-061.json @@ -0,0 +1,353 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 230, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 320, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 410, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 500, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 590, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 230, + "y": 280, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 310, + "y": 280, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 390, + "y": 280, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 470, + "y": 280, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 280, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 630, + "y": 280, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 710, + "y": 280, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 790, + "y": 280, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 230, + "y": 360, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 320, + "y": 360, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 410, + "y": 360, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 500, + "y": 360, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 230, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 310, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 390, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 470, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 630, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 710, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 230, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 320, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 410, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 500, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 590, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 230, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 310, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 390, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 470, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 630, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 710, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 790, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 870, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 300, + "y": 720, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 720, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 500, + "y": 720, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 720, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 720, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 720, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 900, + "y": 720, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 160, + "y": 190 + }, + { + "x": 160, + "y": 640 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-062.json b/assets/gamedata/peggle/level-062.json new file mode 100644 index 0000000..a61b24c --- /dev/null +++ b/assets/gamedata/peggle/level-062.json @@ -0,0 +1,320 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 250, + "y": 235, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 450, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 650, + "y": 235, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 215, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 350, + "y": 285, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 290, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 750, + "y": 285, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 275, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 250, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 350, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 450, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 650, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 750, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 300, + "y": 755, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 755, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 500, + "y": 755, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 755, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 755, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 755, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 900, + "y": 755, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 200, + "y": 380 + }, + { + "x": 430, + "y": 380 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 510, + "y": 380 + }, + { + "x": 740, + "y": 380 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 820, + "y": 380 + }, + { + "x": 1050, + "y": 380 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 160, + "y": 480 + }, + { + "x": 390, + "y": 480 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 470, + "y": 480 + }, + { + "x": 700, + "y": 480 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 780, + "y": 480 + }, + { + "x": 1010, + "y": 480 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 200, + "y": 580 + }, + { + "x": 430, + "y": 580 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 510, + "y": 580 + }, + { + "x": 740, + "y": 580 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 820, + "y": 580 + }, + { + "x": 1050, + "y": 580 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-063.json b/assets/gamedata/peggle/level-063.json new file mode 100644 index 0000000..0fa4167 --- /dev/null +++ b/assets/gamedata/peggle/level-063.json @@ -0,0 +1,332 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 200, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 200, + "y": 283, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 200, + "y": 371, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 200, + "y": 459, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 200, + "y": 547, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 300, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 300, + "y": 328, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 300, + "y": 416, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 283, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 371, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 459, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 547, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 635, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 500, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 500, + "y": 328, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 500, + "y": 416, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 500, + "y": 504, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 283, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 371, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 459, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 547, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 635, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 723, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 328, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 416, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 504, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 283, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 371, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 459, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 547, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 635, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 900, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 900, + "y": 328, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 900, + "y": 416, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 283, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 371, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 459, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 547, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 150, + "y": 795 + }, + { + "x": 1050, + "y": 795 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-064.json b/assets/gamedata/peggle/level-064.json new file mode 100644 index 0000000..eed979d --- /dev/null +++ b/assets/gamedata/peggle/level-064.json @@ -0,0 +1,345 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 460, + "y": 295, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 530, + "y": 295, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 295, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 670, + "y": 295, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 740, + "y": 295, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 460, + "y": 605, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 530, + "y": 605, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 605, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 670, + "y": 605, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 740, + "y": 605, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 395, + "y": 360, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 395, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 395, + "y": 480, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 395, + "y": 540, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 805, + "y": 360, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 805, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 805, + "y": 480, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 805, + "y": 540, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 680, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 480, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 680, + "y": 480, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 330, + "y": 235, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 255, + "y": 235, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 180, + "y": 235, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 870, + "y": 235, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 945, + "y": 235, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1020, + "y": 235, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 330, + "y": 665, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 255, + "y": 665, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 180, + "y": 665, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 870, + "y": 665, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 945, + "y": 665, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1020, + "y": 665, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 180, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1020, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 180, + "y": 730, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1020, + "y": 730, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 450, + "y": 350 + }, + { + "x": 750, + "y": 350 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 750, + "y": 350 + }, + { + "x": 750, + "y": 550 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 450, + "y": 550 + }, + { + "x": 750, + "y": 550 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 450, + "y": 350 + }, + { + "x": 450, + "y": 550 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-065.json b/assets/gamedata/peggle/level-065.json new file mode 100644 index 0000000..70e90eb --- /dev/null +++ b/assets/gamedata/peggle/level-065.json @@ -0,0 +1,255 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 600, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 651, + "y": 231, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 257, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 549, + "y": 231, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 500, + "y": 245, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 245, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 280, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 680, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 920, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 340, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 460, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 740, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 860, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 200, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 340, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 480, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 720, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 860, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 250, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 390, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 530, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 670, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 810, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 150, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1050, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 150, + "y": 480, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1050, + "y": 480, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 250, + "y": 800 + }, + { + "x": 950, + "y": 800 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-066.json b/assets/gamedata/peggle/level-066.json new file mode 100644 index 0000000..f2c90b7 --- /dev/null +++ b/assets/gamedata/peggle/level-066.json @@ -0,0 +1,278 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 250, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 350, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 450, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 650, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 750, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 370, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 300, + "y": 570, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 570, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 500, + "y": 570, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 570, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 570, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 570, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 900, + "y": 570, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 570, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 350, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 350, + "y": 248, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 350, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 750, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 750, + "y": 248, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 750, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 655, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 617, + "y": 302, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 556, + "y": 282, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 556, + "y": 218, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 617, + "y": 198, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 300, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 420, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 540, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 660, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 780, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 900, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 150, + "y": 425 + }, + { + "x": 1050, + "y": 425 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 150, + "y": 625 + }, + { + "x": 1050, + "y": 625 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-067.json b/assets/gamedata/peggle/level-067.json new file mode 100644 index 0000000..284f09f --- /dev/null +++ b/assets/gamedata/peggle/level-067.json @@ -0,0 +1,297 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 520, + "y": 350, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 497, + "y": 421, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 437, + "y": 464, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 363, + "y": 464, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 303, + "y": 421, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 280, + "y": 350, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 303, + "y": 279, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 363, + "y": 236, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 437, + "y": 236, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 497, + "y": 279, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 452, + "y": 350, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 416, + "y": 399, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 358, + "y": 381, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 358, + "y": 319, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 416, + "y": 301, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 463, + "y": 198, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 552, + "y": 287, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 552, + "y": 413, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 463, + "y": 502, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 337, + "y": 502, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 248, + "y": 413, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 248, + "y": 287, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 337, + "y": 198, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 900, + "y": 560, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 871, + "y": 631, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 660, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 729, + "y": 631, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 560, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 729, + "y": 489, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 460, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 871, + "y": 489, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 560, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 861, + "y": 429, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 941, + "y": 526, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 914, + "y": 649, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 688, + "y": 652, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 658, + "y": 529, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 735, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 230, + "y": 730 + }, + { + "x": 1010, + "y": 730 + } + ], + "bends": [ + 25 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-068.json b/assets/gamedata/peggle/level-068.json new file mode 100644 index 0000000..8fc56d8 --- /dev/null +++ b/assets/gamedata/peggle/level-068.json @@ -0,0 +1,276 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 600, + "y": 230, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 730, + "y": 245, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 844, + "y": 288, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 929, + "y": 355, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 974, + "y": 437, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 974, + "y": 523, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 929, + "y": 605, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 844, + "y": 672, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 730, + "y": 715, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 730, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 470, + "y": 715, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 356, + "y": 672, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 271, + "y": 605, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 226, + "y": 523, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 226, + "y": 437, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 271, + "y": 355, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 356, + "y": 288, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 470, + "y": 245, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 340, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 723, + "y": 359, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 812, + "y": 410, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 845, + "y": 480, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 812, + "y": 550, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 723, + "y": 601, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 620, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 478, + "y": 601, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 388, + "y": 550, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 355, + "y": 480, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 388, + "y": 410, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 477, + "y": 359, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 662, + "y": 480, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 619, + "y": 539, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 516, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 444, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 619, + "y": 421, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 460, + "y": 158 + }, + { + "x": 740, + "y": 158 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-069.json b/assets/gamedata/peggle/level-069.json new file mode 100644 index 0000000..72ab5e8 --- /dev/null +++ b/assets/gamedata/peggle/level-069.json @@ -0,0 +1,245 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 200, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 280, + "y": 268, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 360, + "y": 341, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 440, + "y": 414, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 488, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 561, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 680, + "y": 634, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 760, + "y": 707, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 840, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 450, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 536, + "y": 274, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 621, + "y": 352, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 707, + "y": 431, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 793, + "y": 509, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 879, + "y": 588, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 964, + "y": 666, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1050, + "y": 745, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 920, + "y": 268, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 840, + "y": 341, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 760, + "y": 414, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 680, + "y": 488, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 634, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 440, + "y": 707, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 360, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 750, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 664, + "y": 274, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 579, + "y": 352, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 493, + "y": 431, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 407, + "y": 509, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 321, + "y": 588, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 236, + "y": 666, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 150, + "y": 745, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [] +} diff --git a/assets/gamedata/peggle/level-070.json b/assets/gamedata/peggle/level-070.json new file mode 100644 index 0000000..0e8567f --- /dev/null +++ b/assets/gamedata/peggle/level-070.json @@ -0,0 +1,296 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 556, + "y": 355, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 524, + "y": 399, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 473, + "y": 382, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 473, + "y": 328, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 524, + "y": 311, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 736, + "y": 355, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 704, + "y": 399, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 653, + "y": 382, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 653, + "y": 328, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 704, + "y": 311, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 480, + "y": 535, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 560, + "y": 535, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 640, + "y": 535, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 720, + "y": 535, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 480, + "y": 580, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 560, + "y": 580, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 640, + "y": 580, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 720, + "y": 580, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 325, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 325, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 325, + "y": 560, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 875, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 875, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 875, + "y": 560, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 300, + "y": 750, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 420, + "y": 750, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 540, + "y": 750, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 660, + "y": 750, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 780, + "y": 750, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 900, + "y": 750, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 415, + "y": 215 + }, + { + "x": 785, + "y": 215 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 415, + "y": 655 + }, + { + "x": 785, + "y": 655 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 390, + "y": 240 + }, + { + "x": 390, + "y": 630 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 810, + "y": 240 + }, + { + "x": 810, + "y": 630 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-071.json b/assets/gamedata/peggle/level-071.json new file mode 100644 index 0000000..db94998 --- /dev/null +++ b/assets/gamedata/peggle/level-071.json @@ -0,0 +1,297 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 250, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 250, + "y": 287, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 250, + "y": 379, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 250, + "y": 471, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 250, + "y": 563, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 250, + "y": 655, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 332, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 424, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 516, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 608, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 287, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 379, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 471, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 563, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 655, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 747, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 332, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 424, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 516, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 608, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 287, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 379, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 471, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 563, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 655, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 850, + "y": 747, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 240, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 332, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 424, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 516, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 608, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 150, + "y": 800 + }, + { + "x": 1050, + "y": 800 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-072.json b/assets/gamedata/peggle/level-072.json new file mode 100644 index 0000000..89e598c --- /dev/null +++ b/assets/gamedata/peggle/level-072.json @@ -0,0 +1,241 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 662, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 631, + "y": 524, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 569, + "y": 524, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 538, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 569, + "y": 416, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 631, + "y": 416, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 560, + "y": 335, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 545, + "y": 245, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 640, + "y": 335, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 655, + "y": 245, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 735, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 825, + "y": 415, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 735, + "y": 510, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 825, + "y": 525, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 875, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 560, + "y": 605, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 545, + "y": 695, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 640, + "y": 605, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 655, + "y": 695, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 745, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 465, + "y": 430, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 375, + "y": 415, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 465, + "y": 510, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 375, + "y": 525, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 325, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 770, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 770, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 430, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 430, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 150, + "y": 215 + }, + { + "x": 340, + "y": 170 + } + ], + "bends": [ + -18 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-073.json b/assets/gamedata/peggle/level-073.json new file mode 100644 index 0000000..1ce85e9 --- /dev/null +++ b/assets/gamedata/peggle/level-073.json @@ -0,0 +1,201 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 400, + "y": 400, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 490, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 580, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 670, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 400, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 490, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 580, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 670, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 692, + "y": 560, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 665, + "y": 625, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 652, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 535, + "y": 625, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 508, + "y": 560, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 535, + "y": 495, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 468, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 665, + "y": 495, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 200, + "y": 660, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 200, + "y": 730, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 660, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 730, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 280, + "y": 255 + }, + { + "x": 920, + "y": 255 + } + ], + "bends": [ + -40 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 345, + "y": 345 + }, + { + "x": 855, + "y": 345 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-074.json b/assets/gamedata/peggle/level-074.json new file mode 100644 index 0000000..58bf42f --- /dev/null +++ b/assets/gamedata/peggle/level-074.json @@ -0,0 +1,210 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 250, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 338, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 425, + "y": 580, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 513, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 460, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 688, + "y": 400, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 775, + "y": 340, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 863, + "y": 280, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 250, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 338, + "y": 280, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 425, + "y": 340, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 513, + "y": 400, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 688, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 775, + "y": 580, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 863, + "y": 640, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 950, + "y": 700, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 168, + "y": 757, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1032, + "y": 757, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 540, + "y": 255, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 570, + "y": 203, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 630, + "y": 203, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 660, + "y": 255, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 380, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 820, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 150, + "y": 460, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1050, + "y": 460, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 780, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [] +} diff --git a/assets/gamedata/peggle/level-075.json b/assets/gamedata/peggle/level-075.json new file mode 100644 index 0000000..260bdf1 --- /dev/null +++ b/assets/gamedata/peggle/level-075.json @@ -0,0 +1,304 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 460, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 580, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 820, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 940, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 280, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 640, + "y": 280, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 760, + "y": 280, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 880, + "y": 280, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 280, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 220, + "y": 360, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 580, + "y": 360, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 360, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 820, + "y": 360, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 940, + "y": 360, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 280, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 760, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 880, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 220, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 340, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 460, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 820, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 940, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 280, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 220, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 340, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 460, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 580, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 700, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 280, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 640, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 760, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 255, + "y": 245 + }, + { + "x": 955, + "y": 745 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-076.json b/assets/gamedata/peggle/level-076.json new file mode 100644 index 0000000..3d5c81a --- /dev/null +++ b/assets/gamedata/peggle/level-076.json @@ -0,0 +1,199 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 427, + "y": 325, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 467, + "y": 367, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 489, + "y": 421, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 489, + "y": 479, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 467, + "y": 533, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 427, + "y": 575, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 773, + "y": 575, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 733, + "y": 533, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 711, + "y": 479, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 711, + "y": 421, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 733, + "y": 367, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 773, + "y": 325, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 648, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 615, + "y": 496, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 561, + "y": 478, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 561, + "y": 422, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 615, + "y": 404, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 450, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 230, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 970, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 180, + "y": 660, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1020, + "y": 660, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 430, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 770, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 320, + "y": 720 + }, + { + "x": 880, + "y": 720 + } + ], + "bends": [ + -35 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-077.json b/assets/gamedata/peggle/level-077.json new file mode 100644 index 0000000..b24bb14 --- /dev/null +++ b/assets/gamedata/peggle/level-077.json @@ -0,0 +1,267 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 250, + "y": 228, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 220, + "y": 282, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 280, + "y": 282, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 520, + "y": 193, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 490, + "y": 247, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 550, + "y": 247, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 233, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 770, + "y": 287, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 830, + "y": 287, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1010, + "y": 388, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 980, + "y": 442, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1040, + "y": 442, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 300, + "y": 448, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 270, + "y": 502, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 330, + "y": 502, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 645, + "y": 418, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 615, + "y": 472, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 675, + "y": 472, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 900, + "y": 598, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 870, + "y": 652, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 930, + "y": 652, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 668, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 370, + "y": 722, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 430, + "y": 722, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 690, + "y": 693, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 660, + "y": 747, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 720, + "y": 747, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 160, + "y": 568, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 130, + "y": 622, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 190, + "y": 622, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 130, + "y": 345 + }, + { + "x": 480, + "y": 320 + }, + { + "x": 880, + "y": 375 + } + ], + "bends": [ + 45, + -45 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 260, + "y": 590 + }, + { + "x": 620, + "y": 565 + }, + { + "x": 1040, + "y": 735 + } + ], + "bends": [ + -45, + 45 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-078.json b/assets/gamedata/peggle/level-078.json new file mode 100644 index 0000000..b955bce --- /dev/null +++ b/assets/gamedata/peggle/level-078.json @@ -0,0 +1,227 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 646, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 614, + "y": 514, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 563, + "y": 497, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 563, + "y": 443, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 614, + "y": 426, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 664, + "y": 514, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 618, + "y": 556, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 536, + "y": 562, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 457, + "y": 513, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 436, + "y": 421, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 501, + "y": 329, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 638, + "y": 292, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 787, + "y": 341, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 867, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 822, + "y": 623, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 654, + "y": 723, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 432, + "y": 709, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 582, + "y": 384, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 665, + "y": 378, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 743, + "y": 427, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 764, + "y": 519, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 699, + "y": 611, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 562, + "y": 648, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 413, + "y": 599, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 333, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 378, + "y": 317, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 546, + "y": 217, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 768, + "y": 231, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 150, + "y": 200 + }, + { + "x": 400, + "y": 260 + } + ], + "bends": [ + 22 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-079.json b/assets/gamedata/peggle/level-079.json new file mode 100644 index 0000000..d94237c --- /dev/null +++ b/assets/gamedata/peggle/level-079.json @@ -0,0 +1,220 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 600, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 688, + "y": 251, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 512, + "y": 251, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 743, + "y": 307, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 457, + "y": 307, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 307, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 742, + "y": 363, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 458, + "y": 363, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 363, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 687, + "y": 419, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 513, + "y": 419, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 599, + "y": 475, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 511, + "y": 531, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 689, + "y": 531, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 457, + "y": 587, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 743, + "y": 587, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 587, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 458, + "y": 643, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 742, + "y": 643, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 643, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 514, + "y": 699, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 686, + "y": 699, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 603, + "y": 755, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 200, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 200, + "y": 550, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 550, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 300, + "y": 800 + }, + { + "x": 900, + "y": 800 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-080.json b/assets/gamedata/peggle/level-080.json new file mode 100644 index 0000000..4799219 --- /dev/null +++ b/assets/gamedata/peggle/level-080.json @@ -0,0 +1,276 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 656, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 628, + "y": 488, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 572, + "y": 488, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 544, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 572, + "y": 392, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 628, + "y": 392, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 555, + "y": 280, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 579, + "y": 247, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 621, + "y": 247, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 645, + "y": 280, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 716, + "y": 321, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 757, + "y": 326, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 778, + "y": 361, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 761, + "y": 399, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 761, + "y": 481, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 778, + "y": 519, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 757, + "y": 554, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 716, + "y": 559, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 645, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 621, + "y": 633, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 579, + "y": 633, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 555, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 484, + "y": 559, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 443, + "y": 554, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 422, + "y": 519, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 439, + "y": 481, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 439, + "y": 399, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 422, + "y": 361, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 443, + "y": 326, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 484, + "y": 321, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 210, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 255, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 945, + "y": 220, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 990, + "y": 250, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 615, + "y": 700 + }, + { + "x": 570, + "y": 800 + } + ], + "bends": [ + 18 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-081.json b/assets/gamedata/peggle/level-081.json new file mode 100644 index 0000000..f184302 --- /dev/null +++ b/assets/gamedata/peggle/level-081.json @@ -0,0 +1,299 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 400, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 480, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 560, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 640, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 720, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 210, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 410, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 466, + "y": 316, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 522, + "y": 372, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 578, + "y": 428, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 790, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 734, + "y": 316, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 678, + "y": 372, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 622, + "y": 428, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 578, + "y": 492, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 522, + "y": 548, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 466, + "y": 604, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 410, + "y": 660, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 622, + "y": 492, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 678, + "y": 548, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 734, + "y": 604, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 790, + "y": 660, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 400, + "y": 710, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 480, + "y": 710, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 560, + "y": 710, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 640, + "y": 710, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 720, + "y": 710, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 800, + "y": 710, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 545, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 620, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 555, + "y": 655, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 645, + "y": 655, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 230, + "y": 400, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 970, + "y": 400, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 230, + "y": 550, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 970, + "y": 550, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 370, + "y": 165 + }, + { + "x": 830, + "y": 165 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 370, + "y": 762 + }, + { + "x": 830, + "y": 762 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-082.json b/assets/gamedata/peggle/level-082.json new file mode 100644 index 0000000..b81eb86 --- /dev/null +++ b/assets/gamedata/peggle/level-082.json @@ -0,0 +1,276 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 600, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 523, + "y": 287, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 446, + "y": 379, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 369, + "y": 471, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 363, + "y": 544, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 335, + "y": 591, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 280, + "y": 591, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 253, + "y": 544, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 280, + "y": 496, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 335, + "y": 496, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 315, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 435, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 555, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 655, + "y": 650, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 628, + "y": 698, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 573, + "y": 698, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 545, + "y": 650, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 573, + "y": 602, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 628, + "y": 602, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 677, + "y": 287, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 754, + "y": 379, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 831, + "y": 471, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 947, + "y": 544, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 920, + "y": 591, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 865, + "y": 591, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 837, + "y": 544, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 865, + "y": 496, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 920, + "y": 496, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 945, + "y": 636, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 840, + "y": 701, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 723, + "y": 741, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 755, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 477, + "y": 741, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 360, + "y": 701, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 255, + "y": 636, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 350, + "y": 150 + }, + { + "x": 850, + "y": 150 + } + ], + "bends": [ + 0 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-083.json b/assets/gamedata/peggle/level-083.json new file mode 100644 index 0000000..5d4c144 --- /dev/null +++ b/assets/gamedata/peggle/level-083.json @@ -0,0 +1,213 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 600, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 646, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 614, + "y": 514, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 563, + "y": 497, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 563, + "y": 443, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 614, + "y": 426, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 930, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 857, + "y": 641, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 702, + "y": 736, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 527, + "y": 729, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 396, + "y": 632, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 351, + "y": 491, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 397, + "y": 359, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 508, + "y": 282, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 635, + "y": 281, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 732, + "y": 345, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 767, + "y": 442, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 740, + "y": 532, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 669, + "y": 584, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 589, + "y": 585, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 532, + "y": 547, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 513, + "y": 492, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 200, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 200, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 740, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 890, + "y": 175 + }, + { + "x": 1050, + "y": 265 + } + ], + "bends": [ + 20 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-084.json b/assets/gamedata/peggle/level-084.json new file mode 100644 index 0000000..9198efd --- /dev/null +++ b/assets/gamedata/peggle/level-084.json @@ -0,0 +1,255 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 610, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 589, + "y": 500, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 530, + "y": 559, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 450, + "y": 580, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 370, + "y": 559, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 311, + "y": 500, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 290, + "y": 420, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 311, + "y": 340, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 370, + "y": 281, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 450, + "y": 260, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 530, + "y": 281, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 589, + "y": 340, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 910, + "y": 520, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 889, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 830, + "y": 659, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 750, + "y": 680, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 670, + "y": 659, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 611, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 670, + "y": 381, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 750, + "y": 360, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 830, + "y": 381, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 889, + "y": 440, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 200, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 240, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 180, + "y": 400, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 230, + "y": 500, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 170, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1000, + "y": 200, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 960, + "y": 300, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1020, + "y": 400, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 970, + "y": 500, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1030, + "y": 600, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 370, + "y": 745 + }, + { + "x": 830, + "y": 745 + } + ], + "bends": [ + 35 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/level-085.json b/assets/gamedata/peggle/level-085.json new file mode 100644 index 0000000..65be37c --- /dev/null +++ b/assets/gamedata/peggle/level-085.json @@ -0,0 +1,320 @@ +{ + "version": 1, + "board": { + "width": 1200, + "height": 900 + }, + "orangeCount": 25, + "greenCount": 2, + "pegs": [ + { + "x": 858, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 842, + "y": 558, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 798, + "y": 636, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 729, + "y": 693, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 645, + "y": 724, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 555, + "y": 724, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 471, + "y": 693, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 402, + "y": 636, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 358, + "y": 558, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 342, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 358, + "y": 382, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 402, + "y": 304, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 471, + "y": 247, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 555, + "y": 216, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 645, + "y": 216, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 729, + "y": 247, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 798, + "y": 304, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 842, + "y": 382, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 262, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 704, + "y": 290, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 780, + "y": 366, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 808, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 780, + "y": 574, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 704, + "y": 650, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 678, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 496, + "y": 650, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 420, + "y": 574, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 392, + "y": 470, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 420, + "y": 366, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 496, + "y": 290, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 410, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 600, + "y": 350, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 652, + "y": 500, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 704, + "y": 530, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 170, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1030, + "y": 195, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 170, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": true + }, + { + "x": 1030, + "y": 760, + "shape": "circle", + "r": 16, + "orangeEligible": true + } + ], + "walls": [], + "moving": [], + "curves": [ + { + "anchors": [ + { + "x": 200, + "y": 215 + }, + { + "x": 335, + "y": 168 + } + ], + "bends": [ + -15 + ], + "orangeEligible": true + }, + { + "anchors": [ + { + "x": 865, + "y": 168 + }, + { + "x": 1000, + "y": 215 + } + ], + "bends": [ + -15 + ], + "orangeEligible": true + } + ] +} diff --git a/assets/gamedata/peggle/levels.json b/assets/gamedata/peggle/levels.json index 0745e79..a9e947c 100644 --- a/assets/gamedata/peggle/levels.json +++ b/assets/gamedata/peggle/levels.json @@ -200,6 +200,486 @@ "powerId": "zenball", "file": "level-025.json", "background": "study" + }, + { + "level": 26, + "name": "Squared Circle", + "masterId": "smasher", + "powerId": "bodyslam", + "file": "level-026.json", + "background": "arena" + }, + { + "level": 27, + "name": "Top Rope", + "masterId": "smasher", + "powerId": "bodyslam", + "file": "level-027.json", + "background": "arena" + }, + { + "level": 28, + "name": "Turnbuckle", + "masterId": "smasher", + "powerId": "bodyslam", + "file": "level-028.json", + "background": "arena" + }, + { + "level": 29, + "name": "Championship Belt", + "masterId": "smasher", + "powerId": "bodyslam", + "file": "level-029.json", + "background": "arena" + }, + { + "level": 30, + "name": "Steel Cage", + "masterId": "smasher", + "powerId": "bodyslam", + "file": "level-030.json", + "background": "arena" + }, + { + "level": 31, + "name": "Timber!", + "masterId": "maurice", + "powerId": "beaverdam", + "file": "level-031.json", + "background": "river" + }, + { + "level": 32, + "name": "Lazy River", + "masterId": "maurice", + "powerId": "beaverdam", + "file": "level-032.json", + "background": "river" + }, + { + "level": 33, + "name": "The Lodge", + "masterId": "maurice", + "powerId": "beaverdam", + "file": "level-033.json", + "background": "river" + }, + { + "level": 34, + "name": "Log Jam", + "masterId": "maurice", + "powerId": "beaverdam", + "file": "level-034.json", + "background": "river" + }, + { + "level": 35, + "name": "Grand Dam", + "masterId": "maurice", + "powerId": "beaverdam", + "file": "level-035.json", + "background": "river" + }, + { + "level": 36, + "name": "Ahoy!", + "masterId": "schooner", + "powerId": "tailwind", + "file": "level-036.json", + "background": "harbor" + }, + { + "level": 37, + "name": "Full Sail", + "masterId": "schooner", + "powerId": "tailwind", + "file": "level-037.json", + "background": "harbor" + }, + { + "level": 38, + "name": "Crow's Nest", + "masterId": "schooner", + "powerId": "tailwind", + "file": "level-038.json", + "background": "harbor" + }, + { + "level": 39, + "name": "Rolling Swells", + "masterId": "schooner", + "powerId": "tailwind", + "file": "level-039.json", + "background": "harbor" + }, + { + "level": 40, + "name": "Maiden Voyage", + "masterId": "schooner", + "powerId": "tailwind", + "file": "level-040.json", + "background": "harbor" + }, + { + "level": 41, + "name": "Footprints", + "masterId": "terry", + "powerId": "meteor", + "file": "level-041.json", + "background": "jurassic" + }, + { + "level": 42, + "name": "Tar Pits", + "masterId": "terry", + "powerId": "meteor", + "file": "level-042.json", + "background": "jurassic" + }, + { + "level": 43, + "name": "Bone Yard", + "masterId": "terry", + "powerId": "meteor", + "file": "level-043.json", + "background": "jurassic" + }, + { + "level": 44, + "name": "Volcano Day", + "masterId": "terry", + "powerId": "meteor", + "file": "level-044.json", + "background": "jurassic" + }, + { + "level": 45, + "name": "Extinction Event", + "masterId": "terry", + "powerId": "meteor", + "file": "level-045.json", + "background": "jurassic" + }, + { + "level": 46, + "name": "Kickflip", + "masterId": "gerome", + "powerId": "extremeball", + "file": "level-046.json", + "background": "xtreme" + }, + { + "level": 47, + "name": "Half-Pipe", + "masterId": "gerome", + "powerId": "extremeball", + "file": "level-047.json", + "background": "xtreme" + }, + { + "level": 48, + "name": "Slalom", + "masterId": "gerome", + "powerId": "extremeball", + "file": "level-048.json", + "background": "xtreme" + }, + { + "level": 49, + "name": "Big Air", + "masterId": "gerome", + "powerId": "extremeball", + "file": "level-049.json", + "background": "xtreme" + }, + { + "level": 50, + "name": "Mega Ramp", + "masterId": "gerome", + "powerId": "extremeball", + "file": "level-050.json", + "background": "xtreme" + }, + { + "level": 51, + "name": "Jolly Roger", + "masterId": "blackwind", + "powerId": "cannonball", + "file": "level-051.json", + "background": "cove" + }, + { + "level": 52, + "name": "Broadside", + "masterId": "blackwind", + "powerId": "cannonball", + "file": "level-052.json", + "background": "cove" + }, + { + "level": 53, + "name": "Treasure Hold", + "masterId": "blackwind", + "powerId": "cannonball", + "file": "level-053.json", + "background": "cove" + }, + { + "level": 54, + "name": "Ship's Wheel", + "masterId": "blackwind", + "powerId": "cannonball", + "file": "level-054.json", + "background": "cove" + }, + { + "level": 55, + "name": "Davy Jones", + "masterId": "blackwind", + "powerId": "cannonball", + "file": "level-055.json", + "background": "cove" + }, + { + "level": 56, + "name": "Crop Circles", + "masterId": "steve", + "powerId": "beamup", + "file": "level-056.json", + "background": "orbit" + }, + { + "level": 57, + "name": "Little Green Pegs", + "masterId": "steve", + "powerId": "beamup", + "file": "level-057.json", + "background": "orbit" + }, + { + "level": 58, + "name": "Tractor Beam", + "masterId": "steve", + "powerId": "beamup", + "file": "level-058.json", + "background": "orbit" + }, + { + "level": 59, + "name": "Mothership", + "masterId": "steve", + "powerId": "beamup", + "file": "level-059.json", + "background": "orbit" + }, + { + "level": 60, + "name": "Close Encounter", + "masterId": "steve", + "powerId": "beamup", + "file": "level-060.json", + "background": "orbit" + }, + { + "level": 61, + "name": "Access Granted", + "masterId": "nicole", + "powerId": "overclock", + "file": "level-061.json", + "background": "mainframe" + }, + { + "level": 62, + "name": "Firewall", + "masterId": "nicole", + "powerId": "overclock", + "file": "level-062.json", + "background": "mainframe" + }, + { + "level": 63, + "name": "Binary Rain", + "masterId": "nicole", + "powerId": "overclock", + "file": "level-063.json", + "background": "mainframe" + }, + { + "level": 64, + "name": "Motherboard", + "masterId": "nicole", + "powerId": "overclock", + "file": "level-064.json", + "background": "mainframe" + }, + { + "level": 65, + "name": "Root Access", + "masterId": "nicole", + "powerId": "overclock", + "file": "level-065.json", + "background": "mainframe" + }, + { + "level": 66, + "name": "Assembly Line", + "masterId": "dv-8-2303", + "powerId": "lasergrid", + "file": "level-066.json", + "background": "factory" + }, + { + "level": 67, + "name": "Gear Works", + "masterId": "dv-8-2303", + "powerId": "lasergrid", + "file": "level-067.json", + "background": "factory" + }, + { + "level": 68, + "name": "Servo Loop", + "masterId": "dv-8-2303", + "powerId": "lasergrid", + "file": "level-068.json", + "background": "factory" + }, + { + "level": 69, + "name": "Laser Lattice", + "masterId": "dv-8-2303", + "powerId": "lasergrid", + "file": "level-069.json", + "background": "factory" + }, + { + "level": 70, + "name": "Defeat Protocol", + "masterId": "dv-8-2303", + "powerId": "lasergrid", + "file": "level-070.json", + "background": "factory" + }, + { + "level": 71, + "name": "Bamboo Grove", + "masterId": "kage", + "powerId": "shadowslash", + "file": "level-071.json", + "background": "dojo" + }, + { + "level": 72, + "name": "Shuriken", + "masterId": "kage", + "powerId": "shadowslash", + "file": "level-072.json", + "background": "dojo" + }, + { + "level": 73, + "name": "Torii Gate", + "masterId": "kage", + "powerId": "shadowslash", + "file": "level-073.json", + "background": "dojo" + }, + { + "level": 74, + "name": "Twin Katanas", + "masterId": "kage", + "powerId": "shadowslash", + "file": "level-074.json", + "background": "dojo" + }, + { + "level": 75, + "name": "Silent Strike", + "masterId": "kage", + "powerId": "shadowslash", + "file": "level-075.json", + "background": "dojo" + }, + { + "level": 76, + "name": "First Contact", + "masterId": "aiko", + "powerId": "cosmicbloom", + "file": "level-076.json", + "background": "nebula" + }, + { + "level": 77, + "name": "Spore Drift", + "masterId": "aiko", + "powerId": "cosmicbloom", + "file": "level-077.json", + "background": "nebula" + }, + { + "level": 78, + "name": "Spiral Galaxy", + "masterId": "aiko", + "powerId": "cosmicbloom", + "file": "level-078.json", + "background": "nebula" + }, + { + "level": 79, + "name": "Double Helix", + "masterId": "aiko", + "powerId": "cosmicbloom", + "file": "level-079.json", + "background": "nebula" + }, + { + "level": 80, + "name": "Full Bloom", + "masterId": "aiko", + "powerId": "cosmicbloom", + "file": "level-080.json", + "background": "nebula" + }, + { + "level": 81, + "name": "Hourglass", + "masterId": "nadia", + "powerId": "rewind", + "file": "level-081.json", + "background": "chrono" + }, + { + "level": 82, + "name": "Pendulum", + "masterId": "nadia", + "powerId": "rewind", + "file": "level-082.json", + "background": "chrono" + }, + { + "level": 83, + "name": "Time Spiral", + "masterId": "nadia", + "powerId": "rewind", + "file": "level-083.json", + "background": "chrono" + }, + { + "level": 84, + "name": "Paradox", + "masterId": "nadia", + "powerId": "rewind", + "file": "level-084.json", + "background": "chrono" + }, + { + "level": 85, + "name": "End of Time", + "masterId": "nadia", + "powerId": "rewind", + "file": "level-085.json", + "background": "chrono" } ] } diff --git a/assets/gamedata/peggle/powers.md b/assets/gamedata/peggle/powers.md index 975c986..d5dfa5b 100644 --- a/assets/gamedata/peggle/powers.md +++ b/assets/gamedata/peggle/powers.md @@ -12,32 +12,33 @@ with any power — the mapping below is the intended one. - **current ball** — applied to the ball in flight when the green peg is hit - **charge** — banks a lasting effect (multiple shots, or "next time X happens") -## Live powers (levels 1–25) +## Live powers (levels 1–85) -| Friend | Power (`powerId`) | Trigger | What it does | -|---|---|---|---| -| Ethel | Super Guide (`superguide`) | next 3 balls | The aim guide extends through extra bounces, showing where the ball goes after it hits pegs | -| Kona | Multiball (`multiball`) | instant | Kona fetches three more balls — they spawn at the current ball's position, fanned out (mirrored + ±18°) | -| Zanthor | Space Blast (`spaceblast`) | instant | The green peg explodes, instantly lighting and scoring every peg within 150px | -| Fireball | Fireball (`fireball`) | next ball | The ball is tripled in size and blazes straight through pegs without bouncing, lighting everything it touches | -| Victor | Zen Ball (`zenball`) | next 3 balls per hit, stacking | Each shot is silently nudged to the best-scoring angle within ±6° of your aim | +| Levels | Friend | Power (`powerId`) | Trigger | What it does | +|---|---|---|---|---| +| 1–5 | Ethel | Super Guide (`superguide`) | next 3 balls | The aim guide extends through extra bounces, showing where the ball goes after it hits pegs | +| 6–10 | Kona | Multiball (`multiball`) | instant | Kona fetches three more balls — they spawn at the current ball's position, fanned out (mirrored + ±18°) | +| 11–15 | Zanthor | Space Blast (`spaceblast`) | instant | The green peg explodes, instantly lighting and scoring every peg within 150px | +| 16–20 | Fireball | Fireball (`fireball`) | next ball | The ball is tripled in size and blazes straight through pegs without bouncing, lighting everything it touches | +| 21–25 | Victor | Zen Ball (`zenball`) | next 3 balls per hit, stacking | Each shot is silently nudged to the best-scoring angle within ±6° of your aim | +| 26–30 | The Smasher | Body Slam (`bodyslam`) | next ball | The ball becomes a massive slam ball (×1.6 size) that barely slows down when it hits pegs | +| 31–35 | Maurice | Beaver Dam (`beaverdam`) | 3 shots | The free-ball bucket is dammed up to nearly double width (×1.9) for the next 3 shots | +| 36–40 | Schooner | Tailwind (`tailwind`) | next ball | The ball rides the sea breeze at ~half gravity — long, floaty, controllable arcs | +| 41–45 | Terry | Meteor Strike (`meteor`) | instant | A meteor crashes down through the green peg, lighting every peg in its column | +| 46–50 | Gerome | Extreme Ball (`extremeball`) | next ball | Launches at ×1.45 speed, and walls never absorb any of its speed | +| 51–55 | Blackwind | Cannonball (`cannonball`) | current ball | The ball turns to iron and plows straight through the next 3 pegs it strikes | +| 56–60 | Steve | Beam Up (`beamup`) | current ball | If the ball falls off the bottom, a beam catches it and drops it back in from the top at the same spot (once per charge) | +| 61–65 | Nicole | Overclock (`overclock`) | instant | The system is hacked — every peg scores DOUBLE for the rest of the shot | +| 66–70 | DV-8-2303 | Laser Sweep (`lasergrid`) | instant | The green peg fires a horizontal laser across the board, lighting every peg in its row | +| 71–75 | Kage | Shadow Slash (`shadowslash`) | instant | A blade of shadow slashes an X through the green peg, lighting pegs along both diagonals | +| 76–80 | Aiko | Cosmic Bloom (`cosmicbloom`) | instant | Alien spores drift out — 2 random blue pegs bloom into new GREEN power pegs (hitting those charges the power again) | +| 81–85 | Nadia | Rewind (`rewind`) | charge | The next ball that drains without being caught is rewound back into your reserve | -## Powers awaiting their friends - -| Friend | Power (`powerId`) | Trigger | What it does | -|---|---|---|---| -| The Smasher | Body Slam (`bodyslam`) | next ball | The ball becomes a massive slam ball (×1.6 size) that barely slows down when it hits pegs | -| DV-8-2303 | Laser Sweep (`lasergrid`) | instant | The green peg fires a horizontal laser across the board, lighting every peg in its row | -| Steve | Beam Up (`beamup`) | current ball | If the ball falls off the bottom, a beam catches it and drops it back in from the top at the same spot (once per charge) | -| Terry | Meteor Strike (`meteor`) | instant | A meteor crashes down through the green peg, lighting every peg in its column | -| Nicole | Overclock (`overclock`) | instant | The system is hacked — every peg scores DOUBLE for the rest of the shot | -| Gerome | Extreme Ball (`extremeball`) | next ball | Launches at ×1.45 speed, and walls never absorb any of its speed | -| Blackwind | Cannonball (`cannonball`) | current ball | The ball turns to iron and plows straight through the next 3 pegs it strikes | -| Maurice | Beaver Dam (`beaverdam`) | 3 shots | The free-ball bucket is dammed up to nearly double width (×1.9) for the next 3 shots | -| Kage | Shadow Slash (`shadowslash`) | instant | A blade of shadow slashes an X through the green peg, lighting pegs along both diagonals | -| Schooner | Tailwind (`tailwind`) | next ball | The ball rides the sea breeze at ~half gravity — long, floaty, controllable arcs | -| Aiko | Cosmic Bloom (`cosmicbloom`) | instant | Alien spores drift out — 2 random blue pegs bloom into new GREEN power pegs (hitting those charges the power again) | -| Nadia | Rewind (`rewind`) | charge | The next ball that drains without being caught is rewound back into your reserve | +Levels 26–85 are generated by `tools/genPeggleLevels.js` (levels 1–25 are +hand-tuned and the script never rewrites them). Each new friend can get a +board background at `assets/images/peggle/.png` (1200×900) and an +intro video at `assets/videos/peggle/.mp4`; until those exist the +game falls back to the procedural background and the portrait card. ## Adding a new power diff --git a/assets/images/peggle/smasher.png b/assets/images/peggle/smasher.png new file mode 100644 index 0000000..7296ebd Binary files /dev/null and b/assets/images/peggle/smasher.png differ diff --git a/assets/videos/peggle/smasher.mp4 b/assets/videos/peggle/smasher.mp4 new file mode 100644 index 0000000..a915412 Binary files /dev/null and b/assets/videos/peggle/smasher.mp4 differ diff --git a/src/games/peggle/PeggleGame.js b/src/games/peggle/PeggleGame.js index da850c5..83647c5 100644 --- a/src/games/peggle/PeggleGame.js +++ b/src/games/peggle/PeggleGame.js @@ -249,7 +249,7 @@ export default class PeggleGame extends Phaser.Scene { // ── Level select ──────────────────────────────────────────────────────────── - showLevelSelect() { + showLevelSelect(page = null) { this.view = 'select'; this.state = null; this.overlayUp = false; @@ -289,10 +289,20 @@ export default class PeggleGame extends Phaser.Scene { else blocks.push({ masterId: entry.masterId, entries: [entry] }); } + // Paged, 5 friends per page. Defaults to the page holding the next + // unplayed level; Prev/Next re-render the view on the chosen page. + const PER_PAGE = 5; + const pageCount = Math.max(1, Math.ceil(blocks.length / PER_PAGE)); + if (page == null) { + const bi = blocks.findIndex((blk) => blk.entries.some((e) => e.level === nextLevel)); + page = Math.floor(Math.max(0, bi) / PER_PAGE); + } + page = Math.max(0, Math.min(pageCount - 1, page)); + const rowH = 134; const top = 300; const SIZE = 110; - blocks.forEach((blk, b) => { + blocks.slice(page * PER_PAGE, (page + 1) * PER_PAGE).forEach((blk, b) => { const y = top + b * rowH; const first = blk.entries[0]; const master = this.masterFor(first); @@ -350,6 +360,21 @@ export default class PeggleGame extends Phaser.Scene { const reset = new Button(this, 210, GAME_HEIGHT - 78, 'Reset Progress', () => this.confirmResetProgress(), { variant: 'ghost', width: 260, height: 58, fontSize: 22, textColor: COLORS.dangerHex }); this.layer.add([resume, back, reset]); + + if (pageCount > 1) { + const pageLabel = this.add.text(GAME_WIDTH - 330, GAME_HEIGHT - 78, `Page ${page + 1} / ${pageCount}`, { + fontFamily: 'Righteous', fontSize: '24px', color: COLORS.textHex, + }).setOrigin(0.5); + this.layer.add(pageLabel); + if (page > 0) { + this.layer.add(new Button(this, GAME_WIDTH - 470, GAME_HEIGHT - 78, '◀', + () => this.showLevelSelect(page - 1), { variant: 'ghost', width: 70, height: 58, fontSize: 24 })); + } + if (page < pageCount - 1) { + this.layer.add(new Button(this, GAME_WIDTH - 190, GAME_HEIGHT - 78, '▶', + () => this.showLevelSelect(page + 1), { variant: 'ghost', width: 70, height: 58, fontSize: 24 })); + } + } } confirmResetProgress() { diff --git a/tools/genPeggleLevels.js b/tools/genPeggleLevels.js index 929254f..787b444 100644 --- a/tools/genPeggleLevels.js +++ b/tools/genPeggleLevels.js @@ -1,20 +1,30 @@ -// Generates the Peggle level bank + manifest: 25 levels, 5 per friend. +// Generates the Peggle campaign's second wave: levels 26-85, 5 per friend. // node tools/genPeggleLevels.js -// Writes assets/gamedata/peggle/level-001..025.json and levels.json. +// Writes assets/gamedata/peggle/level-026..085.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. +// Levels 1-25 (Ethel/Kona/Zanthor/Fireball/Victor) were generated once and +// then HAND-TUNED in the editor (index.html?peggle-editor=1) — this script +// never rewrites their files and carries their levels.json entries over +// verbatim. The original 1-25 builders live in git history. // -// 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 -// may thin slightly where strokes intersect. +// Blocks: 26-30 Smasher (bodyslam), 31-35 Maurice (beaverdam), 36-40 Schooner +// (tailwind), 41-45 Terry (meteor), 46-50 Gerome (extremeball), 51-55 +// Blackwind (cannonball), 56-60 Steve (beamup), 61-65 Nicole (overclock), +// 66-70 DV-8-2303 (lasergrid), 71-75 Kage (shadowslash), 76-80 Aiko +// (cosmicbloom), 81-85 Nadia (rewind). +// +// Layouts are starting points meant to be hand-tuned later in the editor; +// pegs violating spacing are dropped, so shapes may thin slightly where +// strokes intersect. Every generated level is validated against the same +// constraints tools/verifyPeggle.js lints (bounds, overlap, brick clearance, +// orange-eligible counts, reachability) and the script fails if any level +// breaks one. -import { writeFileSync, mkdirSync } from 'node:fs'; +import { writeFileSync, readFileSync, mkdirSync } from 'node:fs'; import { fileURLToPath } from 'node:url'; import { dirname, join } from 'node:path'; -import { TUNING, tessellateCurves } from '../src/games/peggle/PeggleLogic.js'; +import { TUNING, tessellateCurves, createRound, scoreShot } from '../src/games/peggle/PeggleLogic.js'; const __dirname = dirname(fileURLToPath(import.meta.url)); const OUT_DIR = join(__dirname, '..', 'assets', 'gamedata', 'peggle'); @@ -24,6 +34,7 @@ const MIN_Y = 190; // clear of the launcher const MAX_Y = 790; // clear of the bucket lane const GAP = 6; // required clearance between peg rims const R = TUNING.PEG_R; +const D = Math.PI / 180; // layouts below think in degrees // ── Shape helpers ──────────────────────────────────────────────────────────── @@ -59,19 +70,16 @@ 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]; +// Full ring starting at `startDeg` (for interleaving concentric rings). +function ringAt(cx, cy, radius, n, startDeg, opts = {}) { + return arc(cx, cy, radius, startDeg * D, (startDeg + 360 * (1 - 1 / n)) * D, n, opts); +} + +function ellipseRing(cx, cy, rx, ry, n, opts = {}) { 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)); + for (let i = 0; i < n; i++) { + const a = (i * Math.PI * 2) / n - Math.PI / 2; + pegs.push({ x: cx + rx * Math.cos(a), y: cy + ry * Math.sin(a), ...opts }); } return pegs; } @@ -116,402 +124,981 @@ function levelFile(pegs, over = {}) { // Brick-curve shorthand: anchors + per-segment bends, orange-eligible. const wave = (anchors, bends, orangeEligible = true) => ({ anchors, bends, orangeEligible }); +const seg = (x0, y0, x1, y1, bend = 0) => wave([{ x: x0, y: y0 }, { x: x1, y: y1 }], [bend]); const el = { orangeEligible: true }; -// ── Ethel (1-5): parlor arcs & chandeliers ─────────────────────────────────── +// ── The Smasher (26-30): the wrestling arena ───────────────────────────────── -function ethelLevel(v) { +function smasherLevel(v) { const pegs = []; const curves = []; switch (v) { - case 0: // Tea Time — nested arcs, a steam-wisp brick curve up top + case 0: // Squared Circle — the ring from above: ropes, posts, mat 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(350, 260, 850, 260, 11, el), + ...line(350, 640, 850, 640, 11, el), + ...line(350, 315, 350, 585, 6, el), + ...line(850, 315, 850, 585, 6, el), + { x: 295, y: 210 }, { x: 905, y: 210 }, { x: 295, y: 690 }, { x: 905, y: 690 }, ); - curves.push(wave([{ x: 350, y: 300 }, { x: 600, y: 270 }, { x: 850, y: 300 }], [-45, -45])); + curves.push(seg(280, 180, 920, 180, 35), seg(280, 725, 920, 725, -35)); break; - case 1: // Fine China — arc pairs with a brick saucer bowl + case 1: // Top Rope — three sagging ropes over a roaring crowd 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(150, 680, 1050, 680, 14, el), + ...line(185, 745, 1015, 745, 13, el), + ...line(150, 240, 150, 520, 5, el), + ...line(1050, 240, 1050, 520, 5, el), + ); + curves.push( + seg(220, 250, 980, 250, 55), + seg(220, 380, 980, 380, 55), + seg(220, 510, 980, 510, 55), ); - curves.push(wave([{ x: 380, y: 600 }, { x: 600, y: 600 }, { x: 820, y: 600 }], [55, 55])); break; - case 2: // Doily Drop — lace fan with hanging brick swags + case 2: // Turnbuckle — crossed slam trajectories through a center ring 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(210, 195, 990, 760, 13, el), + ...line(990, 195, 210, 760, 13, el), + ...circle(600, 470, 100, 8, el), + { x: 160, y: 230 }, { x: 1040, y: 230 }, { x: 160, y: 720 }, { x: 1040, y: 720 }, ); - curves.push(wave( - [{ x: 180, y: 640 }, { x: 460, y: 660 }, { x: 740, y: 660 }, { x: 1020, y: 640 }], - [70, 70, 70], - )); + curves.push(seg(430, 800, 770, 800, 0)); break; - case 3: // Lace & Grace — S arcs with a ribbon wave along the bottom + case 3: // Championship Belt — the big gold buckle 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), - ...grid(480, 340, 3, 2, 120, 100, el), + ...circle(600, 480, 115, 12, el), + ...circle(600, 480, 58, 6, el), + { x: 600, y: 480, ...el }, + ...arc(600, 480, 205, 200 * D, 340 * D, 9, el), + ...arc(600, 480, 205, 25 * D, 155 * D, 7, el), ); - curves.push(wave( - [{ x: 200, y: 690 }, { x: 490, y: 710 }, { x: 780, y: 710 }, { x: 1050, y: 690 }], - [-55, 55, -55], - )); + curves.push(seg(140, 480, 420, 480, 25), seg(780, 480, 1060, 480, 25)); break; - default: // Grandma's Attic — chandelier strands under a cobweb swag + default: // Steel Cage — the mesh comes down 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), + ...grid(260, 220, 8, 3, 100, 200, el), + ...grid(320, 320, 8, 3, 100, 200, el), ); - curves.push(wave([{ x: 280, y: 330 }, { x: 600, y: 330 }, { x: 920, y: 330 }], [50, 50])); + curves.push(seg(190, 195, 190, 760, 0), seg(1010, 195, 1010, 760, 0)); break; } return levelFile(settle(pegs), { curves }); } -// ── Kona (6-10): bones, paws & toys ────────────────────────────────────────── +// ── Maurice (31-35): the riverside ─────────────────────────────────────────── -function konaLevel(v) { +function mauriceLevel(v) { const pegs = []; const curves = []; switch (v) { - case 0: // Fetch! — the dog bone under a thrown-ball arc + case 0: // Timber! — felled logs mid-topple 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(300, 620, 5, 2, 150, 90), - ...line(140, 320, 220, 560, 3), - ...line(1060, 320, 980, 560, 3), + ...line(170, 250, 520, 350, 7, el), + ...line(690, 200, 1040, 320, 7, el), + ...line(150, 530, 500, 450, 7, el), + ...line(660, 500, 1050, 580, 8, el), + ...line(300, 690, 420, 690, 3), + ...line(750, 715, 870, 715, 3), ); - curves.push(wave([{ x: 180, y: 300 }, { x: 490, y: 260 }, { x: 800, y: 300 }], [-55, -45])); + curves.push(seg(200, 790, 1000, 790, 0)); 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), - ]; + case 1: // Lazy River — the water winds between grassy banks pegs.push( - ...paw(390, 520, 1), - ...paw(880, 620, 0.8), - ...line(700, 240, 1050, 240, 4), - ); - curves.push(wave([{ x: 200, y: 720 }, { x: 620, y: 730 }, { x: 1040, y: 720 }], [35, -35])); - break; - } - case 2: // Buried Bones — crossed bones over brick dirt mounds - 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), - ...line(560, 210, 640, 210, 2), - ); - curves.push(wave([{ x: 240, y: 700 }, { x: 600, y: 720 }, { x: 960, y: 700 }], [-55, -55])); - break; - case 3: // Squeaky Toy — bouncing-path brick wave under the ball - 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(150, 210, 1050, 210, 10, el), + ...line(150, 680, 1050, 680, 10, el), + ...circle(300, 580, 45, 5, el), + ...circle(880, 605, 45, 5, el), ); curves.push(wave( - [{ x: 150, y: 580 }, { x: 450, y: 600 }, { x: 750, y: 600 }, { x: 1020, y: 580 }], - [55, -55, 55], + [{ x: 110, y: 320 }, { x: 420, y: 460 }, { x: 800, y: 370 }, { x: 1090, y: 500 }], + [100, -100, 100], )); break; - default: // Best in Show — kennel house with bunting swags + case 2: // The Lodge — the stick dome on the water 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(430, 780, 770, 780, 4), + ...arc(600, 560, 225, 180 * D, 360 * D, 12, el), + ...arc(600, 560, 152, 180 * D, 360 * D, 8, el), + ...arc(600, 560, 82, 180 * D, 360 * D, 5, el), + ...line(330, 590, 870, 590, 8, el), + ); + curves.push(wave([{ x: 230, y: 705 }, { x: 600, y: 705 }, { x: 970, y: 705 }], [45, -45])); + break; + case 3: // Log Jam — timber stacked every which way + pegs.push( + ...line(150, 250, 400, 250, 5, el), + ...line(500, 225, 820, 225, 6, el), + ...line(890, 290, 1075, 290, 4, el), + ...line(200, 420, 520, 420, 6, el), + ...line(620, 455, 1000, 455, 7, el), + ...line(150, 610, 450, 610, 6, el), + ...line(560, 645, 900, 645, 7, el), + ...line(300, 780, 900, 780, 7), + ); + curves.push(seg(985, 615, 1080, 735, 0)); + break; + default: // Grand Dam — Maurice's masterpiece holds back the flood + pegs.push( + ...arc(600, 430, 135, 195 * D, 345 * D, 8, el), + ...arc(600, 430, 210, 200 * D, 340 * D, 10, el), + ...line(250, 700, 950, 700, 8, el), + ...line(300, 765, 900, 765, 7, el), + ); + curves.push(wave([{ x: 150, y: 565 }, { x: 600, y: 460 }, { x: 1050, y: 565 }], [30, 30])); + break; + } + return levelFile(settle(pegs), { curves }); +} + +// ── Schooner (36-40): the high seas ────────────────────────────────────────── + +function schoonerLevel(v) { + const pegs = []; + const curves = []; + switch (v) { + case 0: // Ahoy! — the anchor drops + pegs.push( + ...circle(600, 245, 50, 6, el), + ...line(600, 335, 600, 555, 4, el), + ...line(480, 335, 720, 335, 5, el), + ...arc(600, 470, 165, 25 * D, 155 * D, 8, el), + { x: 415, y: 505, ...el }, { x: 785, y: 505, ...el }, + ); + curves.push(seg(140, 660, 460, 660, 40), seg(740, 660, 1060, 660, 40)); + break; + case 1: // Full Sail — canvas stretched before the wind + pegs.push( + ...line(600, 200, 600, 700, 8, el), + ...line(650, 240, 950, 590, 7, el), + ...line(660, 630, 940, 630, 5, el), + ...line(550, 300, 310, 590, 6, el), + ...line(320, 630, 540, 630, 4, el), + ); + curves.push(seg(300, 725, 900, 725, 45)); + break; + case 2: // Crow's Nest — rigging up to the lookout + pegs.push( + ...circle(600, 265, 72, 8, el), + ...line(600, 380, 600, 700, 5, el), + ...line(552, 345, 210, 700, 7, el), + ...line(648, 345, 990, 700, 7, el), + ...line(410, 520, 530, 520, 3, el), + ...line(670, 520, 790, 520, 3, el), + ...line(320, 630, 520, 630, 3, el), + ...line(680, 630, 880, 630, 3, el), + ); + curves.push(seg(200, 780, 1000, 780, 30)); + break; + case 3: // Rolling Swells — wave after wave after wave + pegs.push( + ...arc(280, 245, 45, 200 * D, 340 * D, 3, el), + ...arc(560, 220, 45, 200 * D, 340 * D, 3, el), + ...arc(840, 250, 45, 200 * D, 340 * D, 3, el), + { x: 1055, y: 210, ...el }, ); curves.push( - wave([{ x: 120, y: 330 }, { x: 300, y: 330 }], [45]), - wave([{ x: 900, y: 330 }, { x: 1080, y: 330 }], [45]), + wave([{ x: 120, y: 360 }, { x: 600, y: 360 }, { x: 1080, y: 360 }], [70, -70]), + wave([{ x: 120, y: 530 }, { x: 600, y: 530 }, { x: 1080, y: 530 }], [-70, 70]), + wave([{ x: 120, y: 700 }, { x: 600, y: 700 }, { x: 1080, y: 700 }], [70, -70]), + ); + break; + default: // Maiden Voyage — the good ship herself + pegs.push( + ...line(300, 465, 900, 465, 8, el), + ...line(450, 200, 450, 415, 4, el), + ...line(750, 200, 750, 415, 4, el), + ...arc(450, 315, 85, -80 * D, 80 * D, 5, el), + ...arc(750, 315, 85, -80 * D, 80 * D, 5, el), + { x: 280, y: 430, ...el }, { x: 930, y: 430, ...el }, + ); + curves.push( + seg(250, 520, 950, 520, 120), + seg(180, 720, 480, 720, 35), + seg(720, 720, 1020, 720, 35), ); break; } return levelFile(settle(pegs), { curves }); } -// ── Zanthor (11-15): stars, moons & sigils ─────────────────────────────────── +// ── Terry (41-45): the Mesozoic ────────────────────────────────────────────── -function zanthorLevel(v) { +const footprint = (x, y) => [ + { x, y, ...el }, + { x: x - 46, y: y - 48, ...el }, + { x, y: y - 60, ...el }, + { x: x + 46, y: y - 48, ...el }, +]; + +function terryLevel(v) { const pegs = []; const curves = []; switch (v) { - case 0: // Hocus Pocus — pentagram between two wand-swish curves + case 0: // Footprints — something big walked through here pegs.push( - ...pentagram(600, 480, 230, 8, el), - ...arc(600, 430, 400, Math.PI * 0.12, Math.PI * 0.88, 15, el), + ...footprint(250, 720), ...footprint(450, 595), ...footprint(330, 465), + ...footprint(510, 335), ...footprint(390, 255), + ...line(850, 280, 850, 700, 5, el), + ...line(950, 230, 950, 740, 6, el), + ...line(1050, 330, 1050, 650, 4, el), + ); + curves.push(seg(640, 775, 1060, 775, 20)); + break; + case 1: // Tar Pits — bubbling and hungry + pegs.push( + ...circle(390, 640, 112, 9, el), + ...circle(390, 640, 55, 4, el), + ...circle(860, 590, 100, 8, el), + { x: 860, y: 590, ...el }, + { x: 350, y: 450, ...el }, { x: 430, y: 380, ...el }, { x: 300, y: 315, ...el }, + { x: 520, y: 300, ...el }, { x: 830, y: 430, ...el }, { x: 910, y: 350, ...el }, + { x: 770, y: 265, ...el }, { x: 600, y: 200, ...el }, { x: 600, y: 330, ...el }, + ); + curves.push(seg(150, 800, 1050, 800, 0)); + break; + case 2: // Bone Yard — ribs, femurs, and one grinning skull + pegs.push( + ...line(280, 250, 880, 250, 8, el), + ...arc(320, 260, 160, 75 * D, 105 * D, 3, el), + ...arc(460, 260, 160, 75 * D, 105 * D, 3, el), + ...arc(600, 260, 160, 75 * D, 105 * D, 3, el), + ...arc(740, 260, 160, 75 * D, 105 * D, 3, el), + ...arc(880, 260, 160, 75 * D, 105 * D, 3, el), + ...circle(960, 620, 72, 7, el), + { x: 935, y: 600 }, { x: 985, y: 600 }, + ...line(150, 650, 400, 755, 5, el), + { x: 120, y: 610, ...el }, { x: 440, y: 785, ...el }, + ); + curves.push(wave([{ x: 140, y: 330 }, { x: 260, y: 215 }], [-25])); + break; + case 3: // Volcano Day — duck and cover + pegs.push( + ...line(350, 760, 560, 420, 6, el), + ...line(850, 760, 640, 420, 6, el), + ...arc(600, 395, 120, 205 * D, 335 * D, 7, el), + ...arc(600, 395, 190, 210 * D, 330 * D, 9, el), + ...line(150, 780, 1050, 780, 11, el), + ); + curves.push(seg(480, 170, 720, 170, -20)); + break; + default: // Extinction Event — the sky is falling + pegs.push( + ...circle(300, 620, 58, 6, el), + { x: 300, y: 620, ...el }, + ...line(420, 530, 1040, 200, 8, el), + ...line(520, 655, 1080, 320, 7, el), + ...arc(300, 620, 190, -60 * D, 35 * D, 6, el), + ); + curves.push(seg(150, 785, 1050, 785, 0)); + break; + } + return levelFile(settle(pegs), { curves }); +} + +// ── Gerome (46-50): the skate park ─────────────────────────────────────────── + +function geromeLevel(v) { + const pegs = []; + const curves = []; + switch (v) { + case 0: // Kickflip — board's up, wheels spinning + pegs.push( + ...circle(430, 590, 46, 6, el), + ...circle(770, 590, 46, 6, el), + ...circle(600, 300, 95, 8, el), + { x: 600, y: 300, ...el }, + ...line(200, 745, 1000, 745, 9, el), + ); + curves.push(wave([{ x: 290, y: 490 }, { x: 600, y: 465 }, { x: 910, y: 490 }], [-22, -22])); + break; + case 1: // Half-Pipe — drop in! + pegs.push( + ...arc(180, 285, 90, -60 * D, 15 * D, 4, el), + ...arc(1020, 285, 90, 165 * D, 240 * D, 4, el), + ...circle(600, 335, 85, 7, el), + ...line(450, 780, 750, 780, 4, el), ); curves.push( - wave([{ x: 240, y: 240 }, { x: 600, y: 205 }, { x: 960, y: 240 }], [-30, -30]), - wave([{ x: 250, y: 720 }, { x: 600, y: 740 }, { x: 950, y: 720 }], [45, 45]), + wave([{ x: 180, y: 275 }, { x: 600, y: 620 }, { x: 1020, y: 275 }], [85, -85]), + wave([{ x: 265, y: 300 }, { x: 600, y: 540 }, { x: 935, y: 300 }], [60, -60]), ); break; - case 1: // Crescent Moon — moon with a comet-tail brick curve + case 2: // Slalom — thread the gates 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(760, 220, 1000, 220, 4), + ...line(200, 200, 500, 320, 6, el), + ...line(500, 320, 250, 450, 5, el), + ...line(250, 450, 550, 570, 6, el), + ...line(550, 570, 300, 700, 5, el), + ...line(1000, 200, 700, 320, 6, el), + ...line(700, 320, 950, 450, 5, el), + ...line(950, 450, 650, 570, 6, el), + ...line(650, 570, 900, 700, 5, el), ); - curves.push(wave([{ x: 150, y: 640 }, { x: 450, y: 690 }, { x: 750, y: 670 }], [45, -40])); + curves.push(seg(440, 775, 760, 775, 0)); break; - case 2: // Crystal Ball — orb under a curl of mystic mist + case 3: // Big Air — launch, soar, land 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), - ); - curves.push(wave([{ x: 200, y: 250 }, { x: 500, y: 230 }, { x: 800, y: 250 }], [-40, -40])); - break; - case 3: // Twin Stars — pentagrams over a shooting-star trail - pegs.push( - ...pentagram(330, 400, 170, 6, el), - ...pentagram(870, 560, 170, 6, el), - ...line(430, 470, 750, 500, 4, el), - ...line(650, 220, 1000, 220, 4), - ); - curves.push(wave([{ x: 180, y: 710 }, { x: 600, y: 740 }, { x: 1020, y: 710 }], [45, 45])); - break; - default: // Grand Sigil — circles & cross flanked by runic rails - 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(480, 780, 720, 780, 3), + ...arc(600, 520, 175, 215 * D, 325 * D, 7, el), + ...circle(600, 260, 62, 6, el), + { x: 600, y: 400, ...el }, + ...line(480, 765, 720, 765, 4, el), + ...line(220, 260, 220, 400, 3, el), + ...line(980, 260, 980, 400, 3, el), ); curves.push( - wave([{ x: 160, y: 380 }, { x: 160, y: 700 }], [-65]), - wave([{ x: 1040, y: 380 }, { x: 1040, y: 700 }], [65]), + wave([{ x: 140, y: 700 }, { x: 440, y: 460 }], [-55]), + wave([{ x: 760, y: 460 }, { x: 1060, y: 700 }], [-55]), + ); + break; + default: // Mega Ramp — the one they write about + pegs.push( + ...line(800, 300, 1080, 560, 5, el), + ...line(1080, 300, 800, 560, 5, el), + ...arc(660, 520, 155, 245 * D, 325 * D, 5, el), + ...line(200, 770, 1000, 770, 9, el), + { x: 940, y: 200, ...el }, { x: 760, y: 210, ...el }, + ); + curves.push(wave([{ x: 130, y: 190 }, { x: 460, y: 590 }, { x: 720, y: 680 }], [-75, -30])); + break; + } + return levelFile(settle(pegs), { curves }); +} + +// ── Blackwind (51-55): the pirate cove ─────────────────────────────────────── + +function blackwindLevel(v) { + const pegs = []; + const curves = []; + switch (v) { + case 0: // Jolly Roger — hoist the colors + pegs.push( + ...circle(600, 330, 128, 11, el), + { x: 552, y: 310 }, { x: 648, y: 310 }, + ...arc(600, 370, 55, 55 * D, 125 * D, 2, el), + ...line(380, 545, 820, 705, 6, el), + ...line(820, 545, 380, 705, 6, el), + { x: 330, y: 520, ...el }, { x: 870, y: 520, ...el }, + { x: 330, y: 730, ...el }, { x: 870, y: 730, ...el }, + ); + curves.push(seg(300, 178, 900, 178, -22)); + break; + case 1: // Broadside — cannons roar across the water + pegs.push( + ...line(370, 330, 830, 330, 6, el), + ...line(370, 480, 830, 480, 6, el), + ...line(370, 630, 830, 630, 6, el), + ...line(400, 720, 800, 275, 5, el), + { x: 210, y: 210, ...el }, { x: 990, y: 210, ...el }, + ); + curves.push(seg(250, 290, 250, 700, 45), seg(950, 290, 950, 700, -45)); + break; + case 2: // Treasure Hold — X marks the peg + pegs.push( + ...line(400, 700, 800, 700, 6, el), + ...line(440, 640, 760, 640, 5, el), + ...line(480, 580, 720, 580, 4, el), + ...line(520, 520, 680, 520, 3, el), + ...line(560, 460, 640, 460, 2, el), + { x: 600, y: 405, ...el }, + ...arc(600, 430, 175, 190 * D, 350 * D, 8, el), + ); + curves.push(seg(210, 280, 210, 700, 0), seg(990, 280, 990, 700, 0)); + break; + case 3: // Ship's Wheel — steady as she goes + pegs.push( + ...circle(600, 450, 45, 6, el), + ...ringAt(600, 450, 190, 14, -90, el), + ...ringAt(600, 450, 100, 8, -67.5, el), + ...ringAt(600, 450, 145, 8, -67.5, el), + ...ringAt(600, 450, 238, 8, -67.5, el), + ); + curves.push(seg(250, 762, 950, 762, 30)); + break; + default: // Davy Jones — beware what waits below + pegs.push( + ...arc(600, 340, 140, 180 * D, 360 * D, 9, el), + { x: 548, y: 335 }, { x: 652, y: 335 }, + { x: 190, y: 250, ...el }, { x: 255, y: 195, ...el }, { x: 160, y: 400, ...el }, + { x: 1010, y: 250, ...el }, { x: 945, y: 195, ...el }, { x: 1040, y: 400, ...el }, + ...line(150, 785, 1050, 785, 10, el), + ); + curves.push( + wave([{ x: 480, y: 425 }, { x: 420, y: 585 }, { x: 470, y: 725 }], [55, -55]), + wave([{ x: 560, y: 445 }, { x: 560, y: 610 }, { x: 520, y: 740 }], [-45, 45]), + wave([{ x: 640, y: 445 }, { x: 640, y: 610 }, { x: 680, y: 740 }], [45, -45]), + wave([{ x: 720, y: 425 }, { x: 780, y: 585 }, { x: 730, y: 725 }], [-55, 55]), ); break; } return levelFile(settle(pegs), { curves }); } -// ── Fireball (16-20): rings, rays & bursts ─────────────────────────────────── +// ── Steve (56-60): low Earth orbit ─────────────────────────────────────────── -function fireballLevel(v) { +function steveLevel(v) { const pegs = []; const curves = []; switch (v) { - case 0: // X-Ray Vision — concentric rings, orange core + case 0: // Crop Circles — the wheat field tells a story 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 }, + ...circle(350, 320, 112, 9, el), + { x: 350, y: 320, ...el }, + ...circle(830, 285, 82, 7, el), + ...circle(600, 610, 150, 11, el), + ...circle(600, 610, 76, 6, el), + { x: 600, y: 610, ...el }, ); - curves.push(wave([{ x: 160, y: 720 }, { x: 600, y: 750 }, { x: 1040, y: 720 }], [45, 45])); + curves.push(seg(150, 795, 1050, 795, 0)); break; - case 1: { // Solar Flare — core + rays under a corona curve - 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, - )); - } - curves.push(wave([{ x: 350, y: 250 }, { x: 600, y: 215 }, { x: 850, y: 250 }], [-35, -35])); - break; - } - case 2: // Atomic Age — orbit rings over an electron-path curve + case 1: // Little Green Pegs — they came in peace(?) 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), + ...grid(250, 220, 6, 3, 140, 100, el), + ...grid(320, 270, 5, 2, 140, 100, el), + ...arc(300, 690, 72, 180 * D, 360 * D, 5, el), + ...arc(600, 690, 72, 180 * D, 360 * D, 5, el), + ...arc(900, 690, 72, 180 * D, 360 * D, 5, el), + { x: 600, y: 775 }, ); - curves.push(wave([{ x: 200, y: 680 }, { x: 600, y: 720 }, { x: 1000, y: 680 }], [50, 50])); break; - case 3: { // Meteor Shower — streaks under an atmosphere curve - 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 }); - } - curves.push(wave([{ x: 180, y: 230 }, { x: 600, y: 200 }, { x: 1020, y: 230 }], [-25, -25])); + case 2: // Tractor Beam — hold still, Earth creature + pegs.push( + ...arc(600, 300, 100, 180 * D, 360 * D, 7, el), + ...line(380, 330, 820, 330, 7, el), + ...line(520, 390, 380, 760, 6, el), + ...line(680, 390, 820, 760, 6, el), + { x: 600, y: 500, ...el }, { x: 555, y: 600, ...el }, + { x: 645, y: 650, ...el }, { x: 600, y: 730, ...el }, + { x: 180, y: 220, ...el }, { x: 1020, y: 220, ...el }, + { x: 150, y: 450, ...el }, { x: 1050, y: 450, ...el }, + ); + curves.push(seg(430, 800, 770, 800, 0)); break; - } - default: // Supernova — rings + rays over a shockwave curve + case 3: // Mothership — now THAT'S a saucer pegs.push( - ...circle(600, 470, 90, 8, el), - ...circle(600, 470, 210, 16, el), + ...arc(600, 450, 225, 195 * D, 345 * D, 10, el), + ...line(250, 450, 950, 450, 8, el), + ...arc(600, 430, 122, 190 * D, 350 * D, 6, el), + ...line(350, 505, 850, 505, 6, 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, - )); - } + curves.push( + seg(400, 580, 355, 765, 20), + seg(600, 585, 600, 785, 0), + seg(800, 580, 845, 765, -20), + ); + break; + default: // Close Encounter — a ring of lights over the field pegs.push( - ...arc(140, 210, 150, 0, Math.PI * 0.5, 4), - ...arc(1060, 210, 150, Math.PI * 0.5, Math.PI, 4), + ...circle(600, 450, 232, 16, el), + { x: 520, y: 380, ...el }, { x: 655, y: 345, ...el }, { x: 700, y: 470, ...el }, + { x: 560, y: 525, ...el }, { x: 478, y: 462, ...el }, + { x: 200, y: 195, ...el }, { x: 1000, y: 195, ...el }, { x: 150, y: 660, ...el }, + { x: 1050, y: 660, ...el }, { x: 320, y: 760, ...el }, { x: 880, y: 760, ...el }, ); - curves.push(wave([{ x: 300, y: 720 }, { x: 600, y: 750 }, { x: 900, y: 720 }], [35, 35])); + curves.push(wave([{ x: 150, y: 275 }, { x: 450, y: 175 }], [-20])); break; } return levelFile(settle(pegs), { curves }); } -// ── Victor (21-25): boards & lattices ──────────────────────────────────────── +// ── Nicole (61-65): inside the mainframe ───────────────────────────────────── -function victorLevel(v) { +function nicoleLevel(v) { const pegs = []; const curves = []; switch (v) { - case 0: // Opening Move — checker rows between two brick waves + case 0: // Access Granted — the login screen falls pegs.push( - ...grid(220, 300, 6, 3, 150, 150, el), - ...grid(295, 375, 6, 3, 150, 150, el), + ...line(230, 200, 590, 200, 5, el), + ...line(230, 280, 790, 280, 8, el), + ...line(230, 360, 500, 360, 4, el), + ...line(230, 440, 710, 440, 7, el), + ...line(230, 520, 590, 520, 5, el), + ...line(230, 600, 870, 600, 9, el), + { x: 950, y: 600, ...el }, + ...line(300, 720, 900, 720, 7, el), + ); + curves.push(seg(160, 190, 160, 640, 0)); + break; + case 1: // Firewall — burn through it + pegs.push( + { x: 250, y: 235, ...el }, { x: 450, y: 220, ...el }, { x: 650, y: 235, ...el }, + { x: 850, y: 215, ...el }, { x: 350, y: 285, ...el }, { x: 550, y: 290, ...el }, + { x: 750, y: 285, ...el }, { x: 950, y: 275, ...el }, + ...line(250, 680, 950, 680, 8, el), + ...line(300, 755, 900, 755, 7, el), ); curves.push( - wave([{ x: 160, y: 240 }, { x: 600, y: 205 }, { x: 1040, y: 240 }], [-30, -30]), - wave([{ x: 160, y: 700 }, { x: 600, y: 730 }, { x: 1040, y: 700 }], [45, -45]), + seg(200, 380, 430, 380, 0), seg(510, 380, 740, 380, 0), seg(820, 380, 1050, 380, 0), + seg(160, 480, 390, 480, 0), seg(470, 480, 700, 480, 0), seg(780, 480, 1010, 480, 0), + seg(200, 580, 430, 580, 0), seg(510, 580, 740, 580, 0), seg(820, 580, 1050, 580, 0), ); break; - case 1: { // Knight's Tour — L clusters over a zigzag rail - 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), - ); - curves.push(wave( - [{ x: 160, y: 710 }, { x: 450, y: 730 }, { x: 740, y: 730 }, { x: 1030, y: 710 }], - [40, -40, 40], - )); + case 2: { // Binary Rain — ones and zeroes all the way down + const cols = [5, 3, 6, 4, 7, 4, 6, 3, 5]; + cols.forEach((count, c) => { + const x = 200 + c * 100; + const y0 = c % 2 ? 240 : 195; + for (let i = 0; i < count; i++) pegs.push({ x, y: y0 + i * 88, ...el }); + }); + curves.push(seg(150, 795, 1050, 795, 0)); break; } - case 2: // Double Gambit — chevrons between curved side rails - 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), - ); - } - curves.push( - wave([{ x: 170, y: 300 }, { x: 170, y: 620 }], [-60]), - wave([{ x: 1030, y: 300 }, { x: 1030, y: 620 }], [60]), - ); - break; - case 3: // Fortress — walls & towers ringed by a brick moat + case 3: // Motherboard — don't touch the CPU 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(830, 400, 2, 2, 100, 130, el), - ); - curves.push(wave([{ x: 220, y: 760 }, { x: 980, y: 760 }], [25])); - break; - default: // Checkmate — lattice woven with two long waves - pegs.push( - ...grid(180, 250, 8, 5, 120, 120, el), - ...line(160, 210, 1040, 210, 8), + ...line(460, 295, 740, 295, 5, el), + ...line(460, 605, 740, 605, 5, el), + ...line(395, 360, 395, 540, 4, el), + ...line(805, 360, 805, 540, 4, el), + { x: 520, y: 420, ...el }, { x: 680, y: 420, ...el }, + { x: 520, y: 480, ...el }, { x: 680, y: 480, ...el }, + ...line(330, 235, 180, 235, 3, el), ...line(870, 235, 1020, 235, 3, el), + ...line(330, 665, 180, 665, 3, el), ...line(870, 665, 1020, 665, 3, el), + { x: 180, y: 300, ...el }, { x: 1020, y: 300, ...el }, + { x: 180, y: 730, ...el }, { x: 1020, y: 730, ...el }, ); curves.push( - wave([{ x: 160, y: 350 }, { x: 600, y: 410 }, { x: 1040, y: 350 }], [50, 50]), - wave([{ x: 160, y: 610 }, { x: 600, y: 550 }, { x: 1040, y: 610 }], [-50, -50]), + seg(450, 350, 750, 350, 0), seg(750, 350, 750, 550, 0), + seg(450, 550, 750, 550, 0), seg(450, 350, 450, 550, 0), + ); + break; + default: // Root Access — follow the tree to its root + pegs.push( + { x: 600, y: 195, ...el }, + ...arc(600, 195, 62, 35 * D, 145 * D, 3, el), + { x: 400, y: 300, ...el }, { x: 800, y: 300, ...el }, + { x: 500, y: 245, ...el }, { x: 700, y: 245, ...el }, + { x: 280, y: 440, ...el }, { x: 520, y: 440, ...el }, + { x: 680, y: 440, ...el }, { x: 920, y: 440, ...el }, + { x: 340, y: 370, ...el }, { x: 460, y: 370, ...el }, + { x: 740, y: 370, ...el }, { x: 860, y: 370, ...el }, + ...line(200, 600, 480, 600, 3, el), ...line(720, 600, 1000, 600, 3, el), + ...line(250, 740, 950, 740, 6, el), + { x: 150, y: 300, ...el }, { x: 1050, y: 300, ...el }, + { x: 150, y: 480, ...el }, { x: 1050, y: 480, ...el }, + ); + curves.push(seg(250, 800, 950, 800, 0)); + break; + } + return levelFile(settle(pegs), { curves }); +} + +// ── DV-8-2303 (66-70): the robot works ─────────────────────────────────────── + +function dvLevel(v) { + const pegs = []; + const curves = []; + switch (v) { + case 0: // Assembly Line — units roll off the belt + pegs.push( + ...line(250, 370, 950, 370, 8, el), + ...line(300, 570, 1000, 570, 8, el), + ...line(350, 195, 350, 300, 3, el), + ...line(750, 195, 750, 300, 3, el), + ...circle(600, 250, 55, 5, el), + ...line(300, 740, 900, 740, 6, el), + ); + curves.push(seg(150, 425, 1050, 425, 0), seg(150, 625, 1050, 625, 0)); + break; + case 1: // Gear Works — teeth within teeth + pegs.push( + ...circle(400, 350, 120, 10, el), + ...circle(400, 350, 52, 5, el), + ...ringAt(400, 350, 165, 8, -67.5, el), + ...circle(800, 560, 100, 8, el), + { x: 800, y: 560, ...el }, + ...ringAt(800, 560, 145, 7, -65, el), + ); + curves.push(seg(230, 730, 1010, 730, 25)); + break; + case 2: // Servo Loop — round and round the circuit + pegs.push( + ...ellipseRing(600, 480, 380, 250, 18, el), + ...ellipseRing(600, 480, 245, 140, 12, el), + ...circle(600, 480, 62, 5, el), + ); + curves.push(seg(460, 158, 740, 158, 0)); + break; + case 3: // Laser Lattice — mind the beams + pegs.push( + ...line(200, 195, 840, 780, 9, el), + ...line(450, 195, 1050, 745, 8, el), + ...line(1000, 195, 360, 780, 9, el), + ...line(750, 195, 150, 745, 8, el), + ); + break; + default: // Defeat Protocol — face the machine + pegs.push( + ...circle(510, 355, 46, 5, el), + ...circle(690, 355, 46, 5, el), + { x: 600, y: 450, ...el }, + ...line(480, 535, 720, 535, 4, el), + ...line(480, 580, 720, 580, 4, el), + { x: 325, y: 300, ...el }, { x: 325, y: 430, ...el }, { x: 325, y: 560, ...el }, + { x: 875, y: 300, ...el }, { x: 875, y: 430, ...el }, { x: 875, y: 560, ...el }, + ...line(300, 750, 900, 750, 6, el), + ); + curves.push( + seg(415, 215, 785, 215, 0), + seg(415, 655, 785, 655, 0), + seg(390, 240, 390, 630, 0), + seg(810, 240, 810, 630, 0), ); break; } return levelFile(settle(pegs), { curves }); } +// ── Kage (71-75): the moonlit dojo ─────────────────────────────────────────── + +function kageLevel(v) { + const pegs = []; + const curves = []; + switch (v) { + case 0: { // Bamboo Grove — stalks in the mist + const cols = [[250, 195, 6], [400, 240, 6], [550, 195, 7], [700, 240, 6], [850, 195, 7], [1000, 240, 6]]; + for (const [x, y0, n] of cols) for (let i = 0; i < n; i++) pegs.push({ x, y: y0 + i * 92, ...el }); + curves.push(seg(150, 800, 1050, 800, 0)); + break; + } + case 1: // Shuriken — thrown true + pegs.push( + ...circle(600, 470, 62, 6, el), + // four blades: two edge pegs per side + a tip + { x: 560, y: 335, ...el }, { x: 545, y: 245, ...el }, { x: 640, y: 335, ...el }, + { x: 655, y: 245, ...el }, { x: 600, y: 195, ...el }, + { x: 735, y: 430, ...el }, { x: 825, y: 415, ...el }, { x: 735, y: 510, ...el }, + { x: 825, y: 525, ...el }, { x: 875, y: 470, ...el }, + { x: 560, y: 605, ...el }, { x: 545, y: 695, ...el }, { x: 640, y: 605, ...el }, + { x: 655, y: 695, ...el }, { x: 600, y: 745, ...el }, + { x: 465, y: 430, ...el }, { x: 375, y: 415, ...el }, { x: 465, y: 510, ...el }, + { x: 375, y: 525, ...el }, { x: 325, y: 470, ...el }, + { x: 770, y: 300, ...el }, { x: 770, y: 640, ...el }, + { x: 430, y: 300, ...el }, { x: 430, y: 640, ...el }, + ); + curves.push(wave([{ x: 150, y: 215 }, { x: 340, y: 170 }], [-18])); + break; + case 2: // Torii Gate — pass beneath with honor + pegs.push( + ...line(400, 400, 400, 760, 5, el), + ...line(800, 400, 800, 760, 5, el), + ...circle(600, 560, 92, 8, el), + { x: 200, y: 660, ...el }, { x: 200, y: 730, ...el }, + { x: 1000, y: 660, ...el }, { x: 1000, y: 730, ...el }, + ); + curves.push(seg(280, 255, 920, 255, -40), seg(345, 345, 855, 345, 0)); + break; + case 3: // Twin Katanas — crossed steel + pegs.push( + ...line(250, 700, 950, 220, 9, el), + ...line(250, 220, 950, 700, 9, el), + { x: 168, y: 757, ...el }, { x: 1032, y: 757, ...el }, + ...arc(600, 255, 60, 180 * D, 360 * D, 4, el), + { x: 380, y: 195, ...el }, { x: 820, y: 195, ...el }, + { x: 150, y: 460, ...el }, { x: 1050, y: 460, ...el }, { x: 600, y: 780, ...el }, + ); + break; + default: { // Silent Strike — one clean cut through the dark + // A dense field with a diagonal slash of empty space through it. + const ax = 150; const ay = 150; const bx = 1050; const by = 820; + for (let r = 0; r < 8; r++) { + const y = 200 + r * 80; + const off = r % 2 ? 60 : 0; + for (let c = 0; c < 7; c++) { + const x = 220 + off + c * 120; + const t = ((x - ax) * (bx - ax) + (y - ay) * (by - ay)) / ((bx - ax) ** 2 + (by - ay) ** 2); + const px = ax + t * (bx - ax); + const py = ay + t * (by - ay); + if (Math.hypot(x - px, y - py) > 82) pegs.push({ x, y, ...el }); + } + } + curves.push(seg(255, 245, 955, 745, 0)); + break; + } + } + return levelFile(settle(pegs), { curves }); +} + +// ── Aiko (76-80): a garden between galaxies ────────────────────────────────── + +const triad = (x, y) => [ + { x, y: y - 32, ...el }, + { x: x - 30, y: y + 22, ...el }, + { x: x + 30, y: y + 22, ...el }, +]; + +function aikoLevel(v) { + const pegs = []; + const curves = []; + switch (v) { + case 0: // First Contact — two worlds, fingertips apart + pegs.push( + ...arc(340, 450, 152, -55 * D, 55 * D, 6, el), + ...arc(860, 450, 152, 125 * D, 235 * D, 6, el), + ...circle(600, 450, 48, 5, el), + { x: 600, y: 450, ...el }, + { x: 230, y: 210, ...el }, { x: 970, y: 210, ...el }, { x: 180, y: 660, ...el }, + { x: 1020, y: 660, ...el }, { x: 430, y: 195, ...el }, { x: 770, y: 195, ...el }, + ); + curves.push(seg(320, 720, 880, 720, -35)); + break; + case 1: // Spore Drift — seeds on the solar wind + pegs.push( + ...triad(250, 260), ...triad(520, 225), ...triad(800, 265), ...triad(1010, 420), + ...triad(300, 480), ...triad(645, 450), ...triad(900, 630), + ...triad(400, 700), ...triad(690, 725), ...triad(160, 600), + ); + curves.push( + wave([{ x: 130, y: 345 }, { x: 480, y: 320 }, { x: 880, y: 375 }], [45, -45]), + wave([{ x: 260, y: 590 }, { x: 620, y: 565 }, { x: 1040, y: 735 }], [-45, 45]), + ); + break; + case 2: { // Spiral Galaxy — arms of stars + pegs.push(...circle(600, 470, 46, 5, el)); + for (const phase of [0, 180]) { + for (let k = 1; k <= 12; k++) { + const a = (phase + k * 40) * D; + const r = 60 + k * 23; + pegs.push({ x: 600 + r * Math.cos(a), y: 470 + r * Math.sin(a) * 0.82, ...el }); + } + } + curves.push(wave([{ x: 150, y: 200 }, { x: 400, y: 260 }], [22])); + break; + } + case 3: { // Double Helix — life, but not as we know it + for (let i = 0; i <= 10; i++) { + const y = 195 + i * 56; + const s = Math.sin(i * 0.63); + pegs.push({ x: 600 + 150 * s, y, ...el }); + pegs.push({ x: 600 - 150 * s, y, ...el }); + if (Math.abs(s) > 0.85) pegs.push({ x: 600, y, ...el }); + } + pegs.push( + { x: 200, y: 250, ...el }, { x: 1000, y: 250, ...el }, + { x: 200, y: 550, ...el }, { x: 1000, y: 550, ...el }, + ); + curves.push(seg(300, 800, 900, 800, 0)); + break; + } + default: { // Full Bloom — the garden opens all at once + pegs.push(...circle(600, 440, 56, 6, el), { x: 600, y: 440, ...el }); + for (let k = 0; k < 6; k++) { + const a = -90 + k * 60; + const cx = 600 + 152 * Math.cos(a * D); + const cy = 440 + 152 * Math.sin(a * D); + pegs.push(...arc(cx, cy, 46, (a - 80) * D, (a + 80) * D, 4, el)); + } + pegs.push( + { x: 210, y: 220, ...el }, { x: 255, y: 250, ...el }, + { x: 945, y: 220, ...el }, { x: 990, y: 250, ...el }, + ); + curves.push(seg(615, 700, 570, 800, 18)); + break; + } + } + return levelFile(settle(pegs), { curves }); +} + +// ── Nadia (81-85): the end of time ─────────────────────────────────────────── + +function nadiaLevel(v) { + const pegs = []; + const curves = []; + switch (v) { + case 0: // Hourglass — the sand runs out + pegs.push( + ...line(400, 210, 800, 210, 6, el), + ...line(410, 260, 578, 428, 4, el), + ...line(790, 260, 622, 428, 4, el), + ...line(578, 492, 410, 660, 4, el), + ...line(622, 492, 790, 660, 4, el), + ...line(400, 710, 800, 710, 6, el), + { x: 600, y: 470, ...el }, { x: 600, y: 545, ...el }, { x: 600, y: 620, ...el }, + { x: 555, y: 655, ...el }, { x: 645, y: 655, ...el }, + { x: 230, y: 400, ...el }, { x: 970, y: 400, ...el }, + { x: 230, y: 550, ...el }, { x: 970, y: 550, ...el }, + ); + curves.push(seg(370, 165, 830, 165, 0), seg(370, 762, 830, 762, 0)); + break; + case 1: { // Pendulum — tick... tock... + pegs.push({ x: 600, y: 195, ...el }); + for (const deg of [-40, 0, 40]) { + const s = Math.sin(deg * D); + const c = Math.cos(deg * D); + for (const r of [120, 240, 360]) pegs.push({ x: 600 + r * s, y: 195 + r * c, ...el }); + pegs.push(...circle(600 + 455 * s, 195 + 455 * c, 55, 6, el)); + } + pegs.push(...arc(600, 195, 560, 52 * D, 128 * D, 7, el)); + curves.push(seg(350, 150, 850, 150, 0)); + break; + } + case 2: { // Time Spiral — it all comes around again + pegs.push({ x: 600, y: 470, ...el }, ...circle(600, 470, 46, 5, el)); + for (let k = 0; k <= 15; k++) { + const a = k * 35 * D; + const r = 330 - k * 16; + pegs.push({ x: 600 + r * Math.cos(a), y: 470 + r * Math.sin(a) * 0.95, ...el }); + } + pegs.push( + { x: 200, y: 200, ...el }, { x: 1000, y: 200, ...el }, + { x: 200, y: 740, ...el }, { x: 1000, y: 740, ...el }, + ); + curves.push(wave([{ x: 890, y: 175 }, { x: 1050, y: 265 }], [20])); + break; + } + case 3: // Paradox — two truths, one board + pegs.push( + ...circle(450, 420, 160, 12, el), + ...circle(750, 520, 160, 12, el), + { x: 200, y: 200, ...el }, { x: 240, y: 300, ...el }, { x: 180, y: 400, ...el }, + { x: 230, y: 500, ...el }, { x: 170, y: 600, ...el }, + { x: 1000, y: 200, ...el }, { x: 960, y: 300, ...el }, { x: 1020, y: 400, ...el }, + { x: 970, y: 500, ...el }, { x: 1030, y: 600, ...el }, + ); + curves.push(seg(370, 745, 830, 745, 35)); + break; + default: { // End of Time — the great clock strikes + pegs.push(...circle(600, 470, 258, 18, el), { x: 600, y: 470, ...el }); + for (let h = 0; h < 12; h++) { + const a = (h * 30 - 90) * D; + pegs.push({ x: 600 + 208 * Math.cos(a), y: 470 + 208 * Math.sin(a), ...el }); + } + pegs.push( + { x: 600, y: 410, ...el }, { x: 600, y: 350, ...el }, // minute hand → XII + { x: 652, y: 500, ...el }, { x: 704, y: 530, ...el }, // hour hand → IV + { x: 170, y: 195, ...el }, { x: 1030, y: 195, ...el }, + { x: 170, y: 760, ...el }, { x: 1030, y: 760, ...el }, + ); + curves.push( + wave([{ x: 200, y: 215 }, { x: 335, y: 168 }], [-15]), + wave([{ x: 865, y: 168 }, { x: 1000, y: 215 }], [-15]), + ); + break; + } + } + return levelFile(settle(pegs), { curves }); +} + +// ── Validation (mirrors the verifyPeggle.js data lint) ─────────────────────── + +function validate(lvl, tag) { + const errs = []; + const T = TUNING; + const bricks = tessellateCurves(lvl.curves ?? []); + const boundR = Math.hypot(T.BRICK_LEN / 2, T.BRICK_WID / 2); + for (const b of bricks) { + if (b.x < boundR || b.x > T.BOARD_W - boundR || b.y < 140 || b.y > 820) { + errs.push(`brick out of bounds at ${Math.round(b.x)},${Math.round(b.y)}`); + } + } + for (const c of lvl.curves ?? []) { + if ((c.anchors?.length ?? 0) < 2 || (c.bends?.length ?? -1) !== c.anchors.length - 1) errs.push('bad curve schema'); + } + for (const p of lvl.pegs) { + if (p.x < p.r || p.x > T.BOARD_W - p.r || p.y < 140 || p.y > 820) errs.push(`peg out of bounds at ${p.x},${p.y}`); + for (const b of bricks) { + if ((p.x - b.x) ** 2 + (p.y - b.y) ** 2 < (p.r + T.BRICK_WID / 2) ** 2) errs.push(`peg ${p.x},${p.y} clashes a brick`); + } + } + for (let i = 0; i < lvl.pegs.length; i++) { + for (let j = i + 1; j < lvl.pegs.length; j++) { + const a = lvl.pegs[i]; + const b = lvl.pegs[j]; + if ((a.x - b.x) ** 2 + (a.y - b.y) ** 2 < (a.r + b.r + 6) ** 2) errs.push(`pegs overlap at ${a.x},${a.y} / ${b.x},${b.y}`); + } + } + const eligible = lvl.pegs.filter((p) => p.orangeEligible).length + + bricks.filter((b) => b.orangeEligible).length; + if (eligible < lvl.orangeCount) errs.push(`only ${eligible} orange-eligible pegs+bricks (< ${lvl.orangeCount})`); + if (lvl.pegs.length + bricks.length < lvl.orangeCount + lvl.greenCount + 1) errs.push('too few pegs overall'); + + // Playability: a straight-ish shot must reach at least one peg. + const st = createRound(lvl, { seed: 1 }); + let anyHit = false; + for (const ang of [-0.5, -0.25, 0, 0.25, 0.5]) { + if (scoreShot(st, ang) > 0) { anyHit = true; break; } + } + if (!anyHit) errs.push('no straight-ish shot reaches a peg'); + + if (errs.length) { + throw new Error(`${tag}: ${errs.slice(0, 4).join('; ')}${errs.length > 4 ? ` (+${errs.length - 4} more)` : ''}`); + } + return { bricks: bricks.length, eligible }; +} + // ── Manifest + write ───────────────────────────────────────────────────────── const BLOCKS = [ { - masterId: 'ethel', powerId: 'superguide', background: 'parlor', build: ethelLevel, - names: ['Tea Time', 'Fine China', 'Doily Drop', 'Lace & Grace', "Grandma's Attic"], + masterId: 'smasher', powerId: 'bodyslam', background: 'arena', build: smasherLevel, + names: ['Squared Circle', 'Top Rope', 'Turnbuckle', 'Championship Belt', 'Steel Cage'], }, { - masterId: 'kona', powerId: 'multiball', background: 'park', build: konaLevel, - names: ['Fetch!', 'Paw Prints', 'Buried Bones', 'Squeaky Toy', 'Best in Show'], + masterId: 'maurice', powerId: 'beaverdam', background: 'river', build: mauriceLevel, + names: ['Timber!', 'Lazy River', 'The Lodge', 'Log Jam', 'Grand Dam'], }, { - masterId: 'zanthor', powerId: 'spaceblast', background: 'arcana', build: zanthorLevel, - names: ['Hocus Pocus', 'Crescent Moon', 'Crystal Ball', 'Twin Stars', 'Grand Sigil'], + masterId: 'schooner', powerId: 'tailwind', background: 'harbor', build: schoonerLevel, + names: ['Ahoy!', 'Full Sail', "Crow's Nest", 'Rolling Swells', 'Maiden Voyage'], }, { - masterId: 'fireball', powerId: 'fireball', background: 'lab', build: fireballLevel, - names: ['X-Ray Vision', 'Solar Flare', 'Atomic Age', 'Meteor Shower', 'Supernova'], + masterId: 'terry', powerId: 'meteor', background: 'jurassic', build: terryLevel, + names: ['Footprints', 'Tar Pits', 'Bone Yard', 'Volcano Day', 'Extinction Event'], }, { - masterId: 'victor', powerId: 'zenball', background: 'study', build: victorLevel, - names: ['Opening Move', "Knight's Tour", 'Double Gambit', 'Fortress', 'Checkmate'], + masterId: 'gerome', powerId: 'extremeball', background: 'xtreme', build: geromeLevel, + names: ['Kickflip', 'Half-Pipe', 'Slalom', 'Big Air', 'Mega Ramp'], + }, + { + masterId: 'blackwind', powerId: 'cannonball', background: 'cove', build: blackwindLevel, + names: ['Jolly Roger', 'Broadside', 'Treasure Hold', "Ship's Wheel", 'Davy Jones'], + }, + { + masterId: 'steve', powerId: 'beamup', background: 'orbit', build: steveLevel, + names: ['Crop Circles', 'Little Green Pegs', 'Tractor Beam', 'Mothership', 'Close Encounter'], + }, + { + masterId: 'nicole', powerId: 'overclock', background: 'mainframe', build: nicoleLevel, + names: ['Access Granted', 'Firewall', 'Binary Rain', 'Motherboard', 'Root Access'], + }, + { + masterId: 'dv-8-2303', powerId: 'lasergrid', background: 'factory', build: dvLevel, + names: ['Assembly Line', 'Gear Works', 'Servo Loop', 'Laser Lattice', 'Defeat Protocol'], + }, + { + masterId: 'kage', powerId: 'shadowslash', background: 'dojo', build: kageLevel, + names: ['Bamboo Grove', 'Shuriken', 'Torii Gate', 'Twin Katanas', 'Silent Strike'], + }, + { + masterId: 'aiko', powerId: 'cosmicbloom', background: 'nebula', build: aikoLevel, + names: ['First Contact', 'Spore Drift', 'Spiral Galaxy', 'Double Helix', 'Full Bloom'], + }, + { + masterId: 'nadia', powerId: 'rewind', background: 'chrono', build: nadiaLevel, + names: ['Hourglass', 'Pendulum', 'Time Spiral', 'Paradox', 'End of Time'], }, ]; +const FIRST_NEW_LEVEL = 26; + +// Carry the hand-tuned first wave (1-25) over verbatim from the live manifest. +const existing = JSON.parse(readFileSync(join(OUT_DIR, 'levels.json'), 'utf8')); +const carried = existing.levels.filter((l) => l.level < FIRST_NEW_LEVEL); +if (carried.length !== FIRST_NEW_LEVEL - 1) { + throw new Error(`expected ${FIRST_NEW_LEVEL - 1} existing levels in levels.json, found ${carried.length}`); +} + mkdirSync(OUT_DIR, { recursive: true }); -const manifestLevels = []; -let levelNo = 0; +const manifestLevels = [...carried]; +let levelNo = FIRST_NEW_LEVEL - 1; 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 bricks = tessellateCurves(data.curves ?? []); - const eligible = data.pegs.filter((p) => p.orangeEligible).length - + bricks.filter((b) => b.orangeEligible).length; - if (eligible < data.orangeCount) { - throw new Error(`${file} (${block.names[v]}): only ${eligible} orange-eligible pegs+bricks (< ${data.orangeCount})`); - } + const info = validate(data, `${file} (${block.names[v]})`); writeFileSync(join(OUT_DIR, file), `${JSON.stringify(data, null, 2)}\n`); - console.log(`${file}: ${block.names[v]} [${block.masterId}] — ${data.pegs.length} pegs + ${bricks.length} bricks (${eligible} orange-eligible)`); + console.log(`${file}: ${block.names[v]} [${block.masterId}] — ${data.pegs.length} pegs + ${info.bricks} bricks (${info.eligible} orange-eligible)`); manifestLevels.push({ level: levelNo, name: block.names[v], @@ -525,4 +1112,4 @@ for (const block of BLOCKS) { 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`); +console.log(`levels.json: ${manifest.levels.length} levels (1-${FIRST_NEW_LEVEL - 1} carried over untouched)`); diff --git a/tools/verifyPeggle.js b/tools/verifyPeggle.js index f068c69..8a4e4c0 100644 --- a/tools/verifyPeggle.js +++ b/tools/verifyPeggle.js @@ -774,8 +774,12 @@ console.log('― data lint'); // 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); + const BLOCK_ORDER = [ + 'ethel', 'kona', 'zanthor', 'fireball', 'victor', + 'smasher', 'maurice', 'schooner', 'terry', 'gerome', 'blackwind', + 'steve', 'nicole', 'dv-8-2303', 'kage', 'aiko', 'nadia', + ]; + check('85 levels in 17 friend blocks', manifest.levels.length === BLOCK_ORDER.length * 5); let blocksOk = true; for (let b = 0; b < BLOCK_ORDER.length; b++) { const block = manifest.levels.slice(b * 5, b * 5 + 5); @@ -786,7 +790,8 @@ console.log('― data lint'); 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(',')); + const expectedIntros = BLOCK_ORDER.map((_, b) => b * 5 + 1).join(','); + check('masterId-change rule marks intros at each block start', introLevels.join(',') === expectedIntros, 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)),