moonshot / src /levels.js
DJLougen's picture
MOONSHOT: cosmic night-league batting (static Three.js game)
db520fb verified
Raw History Blame Contribute Delete
3.66 kB
// MOONSHOT — level (inning) definitions.
// Pure data module: no three.js, no DOM. Consumed by game.js and main.js.
//
// Field contract (physics.js createPitch reads these):
// name — display name, chunky uppercase
// tag — short modifier tag for UI chips/logic
// hr — home runs required to clear the inning
// pitches — pitch budget for the inning
// duration — nominal pitch flight time, seconds (lower = faster/harder)
// speedVar — ± fraction of duration randomization per pitch
// curve? — [lo,hi] lateral break amplitude range (meters at plane)
// jitter? — [lo,hi] vibrational wobble amplitude range (meters)
// blurb — one-line flavor for the intro card
// mods — modifier chip labels shown on the intro card
//
// Difficulty shape (monotonic-ish, nine innings — R7, durations R20):
// L1 tutorial mercy: slow, no curve, no jitter, generous 3/8.
// L2 pure speed. L3 introduces the curve (a touch slower — new skill).
// L4 mild jitter. L5 jitter + light curve combo. L6 fast + big break.
// L7 fastest-yet + heavy break + wobble. L8 a breath of slack (4/9)
// before L9 EVENT HORIZON: everything, everywhere, all at once, 5/9.
// Every inning is clearable by perfect play: hr <= pitches always.
// R20: durations cut hard for the real-scale 60.5-ft mound — pitches now
// fly release→plane (18.44 m) in ~0.4–0.6 s, roughly MLB pace.
export const LEVELS = [
{
name: 'BP FASTBALL',
tag: 'warm-up',
hr: 3,
pitches: 8,
duration: 0.62,
speedVar: 0.12,
blurb: 'Pure heat, right down the middle. Find your timing.',
mods: ['SLOW HEAT'],
},
{
name: 'HEAT',
tag: 'speed',
hr: 3,
pitches: 8,
duration: 0.50,
speedVar: 0.16,
blurb: 'The pitcher stops being polite.',
mods: ['+ VELOCITY'],
},
{
name: 'THE BENDER',
tag: 'curve',
hr: 3,
pitches: 8,
duration: 0.55,
speedVar: 0.18,
curve: [0.45, 0.85],
blurb: 'It bends. It lies. Aim where it ends up.',
mods: ['LATE BREAK'],
},
{
name: 'MOON SHOT',
tag: 'jitter',
hr: 4,
pitches: 8,
duration: 0.48,
speedVar: 0.20,
jitter: [0.15, 0.20],
blurb: 'It hums. It wobbles. It wants to be a moon.',
mods: ['LIGHT JITTER'],
},
{
name: 'TWILIGHT ZONE',
tag: 'combo',
hr: 4,
pitches: 8,
duration: 0.46,
speedVar: 0.22,
curve: [0, 0.35],
jitter: [0.15, 0.22],
blurb: 'Half the pitches bend. All of them shimmer.',
mods: ['JITTER', 'MILD CURVE'],
},
{
name: 'ESCAPE VELOCITY',
tag: 'speed-curve',
hr: 4,
pitches: 9,
duration: 0.43,
speedVar: 0.24,
curve: [0.35, 0.70],
blurb: 'Fast enough to leave orbit, bent enough to miss yours.',
mods: ['+ VELOCITY', 'BIG BREAK'],
},
{
name: 'NEUTRON STAR',
tag: 'max-speed',
hr: 5,
pitches: 9,
duration: 0.40,
speedVar: 0.26,
curve: [0.40, 0.75],
jitter: [0.15, 0.25],
blurb: 'Denser. Faster. Heavier. Still just a baseball.',
mods: ['MAX VELOCITY', 'BREAK', 'WOBBLE'],
},
{
name: 'BLACKOUT',
tag: 'pressure',
hr: 4,
pitches: 9,
duration: 0.42,
speedVar: 0.26,
curve: [0.45, 0.80],
jitter: [0.18, 0.28],
blurb: 'The floodlights flicker. Trust your hands.',
mods: ['BREAK', 'JITTER'],
},
{
name: 'EVENT HORIZON',
tag: 'final',
hr: 5,
pitches: 9,
duration: 0.38,
speedVar: 0.30,
curve: [0.40, 0.80],
jitter: [0.20, 0.30],
blurb: 'Everything, everywhere, all at once.',
mods: ['MAX VELOCITY', 'BREAK', 'JITTER'],
},
];