chore(zuma): increase pushSpeed and starScores for all 20 levels

Significantly raise pushSpeed values across all levels (roughly 4x increase)
to make the game more challenging. Updated corresponding star score thresholds
proportionally. Adjusted editor UI max pushSpeed to 400 and updated validation
constraints to match.

Changes affect:
- data/zuma.json: level definitions with new pushSpeed and starScores
- src/games/zuma/ZumaEditor.js: editor input max value
- src/games/zuma/ZumaLogic.js: validation range
- tools/genZuma.js: generator table values
This commit is contained in:
Brian Fertig 2026-07-27 23:15:44 -06:00
parent 8e4e48e540
commit d08b48cdda
4 changed files with 101 additions and 101 deletions

View File

@ -1,5 +1,5 @@
{
"generatedAt": "2026-07-28T04:37:09.319Z",
"generatedAt": "2026-07-28T05:13:50.748Z",
"count": 20,
"levels": [
{
@ -371,13 +371,13 @@
"colors": 4,
"quota": 22,
"introBalls": 7,
"pushSpeed": 25,
"pushSpeed": 100,
"powerUpRate": 0.07,
"seed": 8919,
"starScores": [
590,
880,
1170
750,
1130,
1500
]
},
{
@ -525,13 +525,13 @@
"colors": 4,
"quota": 26,
"introBalls": 8,
"pushSpeed": 32,
"pushSpeed": 128,
"powerUpRate": 0.07,
"seed": 16838,
"starScores": [
710,
1060,
1410
960,
1430,
1910
]
},
{
@ -919,13 +919,13 @@
"colors": 4,
"quota": 30,
"introBalls": 9,
"pushSpeed": 35,
"pushSpeed": 140,
"powerUpRate": 0.065,
"seed": 24757,
"starScores": [
830,
1240,
1650
1140,
1710,
2280
]
},
{
@ -1277,13 +1277,13 @@
"colors": 4,
"quota": 32,
"introBalls": 10,
"pushSpeed": 35,
"pushSpeed": 140,
"powerUpRate": 0.065,
"seed": 32676,
"starScores": [
880,
1320,
1760
1220,
1820,
2430
]
},
{
@ -1487,13 +1487,13 @@
"colors": 4,
"quota": 38,
"introBalls": 11,
"pushSpeed": 37,
"pushSpeed": 148,
"powerUpRate": 0.06,
"seed": 40595,
"starScores": [
1060,
1580,
2110
1480,
2210,
2950
]
},
{
@ -1713,13 +1713,13 @@
"colors": 4,
"quota": 34,
"introBalls": 10,
"pushSpeed": 37,
"pushSpeed": 148,
"powerUpRate": 0.06,
"seed": 48514,
"starScores": [
940,
1410,
1880
1320,
1980,
2640
]
},
{
@ -2091,13 +2091,13 @@
"colors": 4,
"quota": 26,
"introBalls": 8,
"pushSpeed": 45,
"pushSpeed": 180,
"powerUpRate": 0.06,
"seed": 56433,
"starScores": [
740,
1110,
1480
1090,
1640,
2180
]
},
{
@ -2245,13 +2245,13 @@
"colors": 5,
"quota": 30,
"introBalls": 9,
"pushSpeed": 40,
"pushSpeed": 160,
"powerUpRate": 0.055,
"seed": 64352,
"starScores": [
840,
1260,
1680
1200,
1800,
2400
]
},
{
@ -2603,13 +2603,13 @@
"colors": 5,
"quota": 36,
"introBalls": 11,
"pushSpeed": 40,
"pushSpeed": 160,
"powerUpRate": 0.055,
"seed": 72271,
"starScores": [
1010,
1520,
2020
1440,
2160,
2880
]
},
{
@ -2997,13 +2997,13 @@
"colors": 5,
"quota": 34,
"introBalls": 10,
"pushSpeed": 43,
"pushSpeed": 172,
"powerUpRate": 0.055,
"seed": 80190,
"starScores": [
960,
1440,
1920
1400,
2100,
2800
]
},
{
@ -3207,13 +3207,13 @@
"colors": 5,
"quota": 42,
"introBalls": 12,
"pushSpeed": 43,
"pushSpeed": 172,
"powerUpRate": 0.05,
"seed": 88109,
"starScores": [
1190,
1790,
2380
1730,
2600,
3460
]
},
{
@ -3433,13 +3433,13 @@
"colors": 5,
"quota": 38,
"introBalls": 11,
"pushSpeed": 45,
"pushSpeed": 180,
"powerUpRate": 0.05,
"seed": 96028,
"starScores": [
1090,
1630,
2170
1600,
2390,
3190
]
},
{
@ -3791,13 +3791,13 @@
"colors": 5,
"quota": 34,
"introBalls": 10,
"pushSpeed": 48,
"pushSpeed": 192,
"powerUpRate": 0.05,
"seed": 103947,
"starScores": [
980,
1470,
1960
2210,
2940
]
},
{
@ -4001,13 +4001,13 @@
"colors": 5,
"quota": 46,
"introBalls": 13,
"pushSpeed": 48,
"pushSpeed": 192,
"powerUpRate": 0.05,
"seed": 111866,
"starScores": [
1330,
1990,
2650
2980,
3970
]
},
{
@ -4155,13 +4155,13 @@
"colors": 6,
"quota": 32,
"introBalls": 9,
"pushSpeed": 51,
"pushSpeed": 204,
"powerUpRate": 0.05,
"seed": 119785,
"starScores": [
930,
1400,
1860
1420,
2130,
2840
]
},
{
@ -4549,13 +4549,13 @@
"colors": 6,
"quota": 38,
"introBalls": 11,
"pushSpeed": 53,
"pushSpeed": 212,
"powerUpRate": 0.05,
"seed": 127704,
"starScores": [
1120,
1670,
2230
1720,
2580,
3440
]
},
{
@ -4907,13 +4907,13 @@
"colors": 6,
"quota": 34,
"introBalls": 10,
"pushSpeed": 50,
"pushSpeed": 200,
"powerUpRate": 0.045,
"seed": 135623,
"starScores": [
990,
1480,
1970
1500,
2240,
2990
]
},
{
@ -5133,13 +5133,13 @@
"colors": 6,
"quota": 40,
"introBalls": 11,
"pushSpeed": 50,
"pushSpeed": 200,
"powerUpRate": 0.045,
"seed": 143542,
"starScores": [
1160,
1740,
2320
1760,
2640,
3520
]
},
{
@ -5343,13 +5343,13 @@
"colors": 6,
"quota": 50,
"introBalls": 14,
"pushSpeed": 61,
"pushSpeed": 244,
"powerUpRate": 0.045,
"seed": 151461,
"starScores": [
1510,
2260,
3010
2420,
3630,
4840
]
},
{
@ -5553,13 +5553,13 @@
"colors": 6,
"quota": 52,
"introBalls": 14,
"pushSpeed": 64,
"pushSpeed": 256,
"powerUpRate": 0.045,
"seed": 159380,
"starScores": [
1580,
2370,
3160
2580,
3870,
5160
]
}
]

View File

@ -205,7 +205,7 @@ export default class ZumaEditor extends Phaser.Scene {
${field('zu-colors', 'COLORS (4-6)', 'number', 'min="4" max="6" step="1"')}
${field('zu-quota', 'QUOTA', 'number', 'min="20" step="1"')}
${field('zu-intro', 'INTRO BALLS', 'number', 'min="1" step="1"')}
${field('zu-push', 'PUSH SPEED', 'number', 'min="10" max="100" step="1"')}
${field('zu-push', 'PUSH SPEED', 'number', 'min="10" max="400" step="1"')}
${field('zu-power', 'POWER-UP RATE', 'number', 'min="0" max="0.2" step="0.005"')}
${field('zu-seed', 'SEED', 'number', 'step="1"')}
${field('zu-star1', '★ SCORE', 'number', 'step="10"')}

View File

@ -180,7 +180,7 @@ export function validateLevelParams(def) {
if (!(def.colors >= 4 && def.colors <= 6)) errs.push('colors must be 4..6');
if (!(def.quota >= 20)) errs.push('quota must be >= 20');
if (!(def.introBalls < def.quota)) errs.push('introBalls must be < quota');
if (!(def.pushSpeed >= 10 && def.pushSpeed <= 100)) errs.push('pushSpeed must be 10..100');
if (!(def.pushSpeed >= 10 && def.pushSpeed <= 400)) errs.push('pushSpeed must be 10..400');
if (!(def.powerUpRate >= 0 && def.powerUpRate <= 0.2)) errs.push('powerUpRate must be 0..0.2');
if (!(Array.isArray(def.starScores) && def.starScores.length === 3
&& def.starScores[0] < def.starScores[1] && def.starScores[1] < def.starScores[2])) {

View File

@ -170,26 +170,26 @@ const SHAPES = { sCurve, horseshoe, spiral, zigzag, doubleLoop, figureEight };
const TABLE = [
// level, name, shape, colors, quota, intro, push, powerUpRate
[1, 'Riverbend', 'sCurve', 4, 22, 7, 25, 0.07],
[2, 'Temple Gate', 'horseshoe', 4, 26, 8, 32, 0.07],
[3, 'Twin Pools', 'doubleLoop', 4, 30, 9, 35, 0.065],
[4, 'Switchbacks', 'zigzag', 4, 32, 10, 35, 0.065],
[5, 'Serpent Coil', 'spiral', 4, 38, 11, 37, 0.06],
[6, 'Crossroads', 'figureEight', 4, 34, 10, 37, 0.06],
[7, 'Rapids', 'sCurve', 4, 26, 8, 45, 0.06],
[8, 'Sun Court', 'horseshoe', 5, 30, 9, 40, 0.055],
[9, 'Thunder Steps', 'zigzag', 5, 36, 11, 40, 0.055],
[10, 'Twin Serpents', 'doubleLoop', 5, 34, 10, 43, 0.055],
[11, 'Deep Coil', 'spiral', 5, 42, 12, 43, 0.05],
[12, 'Tangled Path', 'figureEight', 5, 38, 11, 45, 0.05],
[13, 'Lightning Run', 'zigzag', 5, 34, 10, 48, 0.05],
[14, 'Whirlpool', 'spiral', 5, 46, 13, 48, 0.05],
[15, 'Obsidian Gate', 'horseshoe', 6, 32, 9, 51, 0.05],
[16, 'Twin Tempests', 'doubleLoop', 6, 38, 11, 53, 0.05],
[17, 'Stormsteps', 'zigzag', 6, 34, 10, 50, 0.045],
[18, 'Maelstrom Cross', 'figureEight', 6, 40, 11, 50, 0.045],
[19, 'Abyss Coil', 'spiral', 6, 50, 14, 61, 0.045],
[20, 'The Final Coil', 'spiral', 6, 52, 14, 64, 0.045],
[1, 'Riverbend', 'sCurve', 4, 22, 7, 100, 0.07],
[2, 'Temple Gate', 'horseshoe', 4, 26, 8, 128, 0.07],
[3, 'Twin Pools', 'doubleLoop', 4, 30, 9, 140, 0.065],
[4, 'Switchbacks', 'zigzag', 4, 32, 10, 140, 0.065],
[5, 'Serpent Coil', 'spiral', 4, 38, 11, 148, 0.06],
[6, 'Crossroads', 'figureEight', 4, 34, 10, 148, 0.06],
[7, 'Rapids', 'sCurve', 4, 26, 8, 180, 0.06],
[8, 'Sun Court', 'horseshoe', 5, 30, 9, 160, 0.055],
[9, 'Thunder Steps', 'zigzag', 5, 36, 11, 160, 0.055],
[10, 'Twin Serpents', 'doubleLoop', 5, 34, 10, 172, 0.055],
[11, 'Deep Coil', 'spiral', 5, 42, 12, 172, 0.05],
[12, 'Tangled Path', 'figureEight', 5, 38, 11, 180, 0.05],
[13, 'Lightning Run', 'zigzag', 5, 34, 10, 192, 0.05],
[14, 'Whirlpool', 'spiral', 5, 46, 13, 192, 0.05],
[15, 'Obsidian Gate', 'horseshoe', 6, 32, 9, 204, 0.05],
[16, 'Twin Tempests', 'doubleLoop', 6, 38, 11, 212, 0.05],
[17, 'Stormsteps', 'zigzag', 6, 34, 10, 200, 0.045],
[18, 'Maelstrom Cross', 'figureEight', 6, 40, 11, 200, 0.045],
[19, 'Abyss Coil', 'spiral', 6, 50, 14, 244, 0.045],
[20, 'The Final Coil', 'spiral', 6, 52, 14, 256, 0.045],
];
// Calibrated against the headless aimbot in verifyZuma.js, which takes the best