monsterplex/src/data/levels/level03.js

42 lines
1.6 KiB
JavaScript

import { WORLD_SCALE } from '../../config.js';
// Hand-tuned profile: flat approach -> steep valley drop -> steep climb out ->
// a long stretch of tight, fast bumps that punish sloppy lean control.
function buildPoints() {
const step = 60 * WORLD_SCALE;
const points = [];
for (let x = -200 * WORLD_SCALE; x <= 3900 * WORLD_SCALE; x += step) {
let y;
if (x < 1200 * WORLD_SCALE) {
y = 420 * WORLD_SCALE + Math.sin(x / (500 * WORLD_SCALE)) * 10 * WORLD_SCALE;
} else if (x < 1500 * WORLD_SCALE) {
y = 420 * WORLD_SCALE + 220 * WORLD_SCALE * ((x - 1200 * WORLD_SCALE) / (300 * WORLD_SCALE));
} else if (x < 1650 * WORLD_SCALE) {
y = 640 * WORLD_SCALE;
} else if (x < 1950 * WORLD_SCALE) {
y = 640 * WORLD_SCALE - 260 * WORLD_SCALE * ((x - 1650 * WORLD_SCALE) / (300 * WORLD_SCALE));
} else if (x < 3650 * WORLD_SCALE) {
y = 380 * WORLD_SCALE + Math.sin(x / (150 * WORLD_SCALE)) * 45 * WORLD_SCALE;
} else {
y = 380 * WORLD_SCALE;
}
points.push({ x, y: Math.round(y) });
}
return points;
}
const END_X = 3900 * WORLD_SCALE;
export default {
id: 'level03',
name: 'Tight Squeeze',
description: 'A steep valley and a long run of sharp bumps - lean early, lean often.',
kidsAboard: 4,
startPosition: { x: 100 * WORLD_SCALE, y: 350 * WORLD_SCALE },
startAngle: 0,
terrain: [{ points: buildPoints() }],
obstacles: [],
goal: { x: END_X - 120 * WORLD_SCALE, y: 260 * WORLD_SCALE, width: 140 * WORLD_SCALE, height: 400 * WORLD_SCALE },
cameraBounds: { x: -300 * WORLD_SCALE, y: 0, width: END_X + 700 * WORLD_SCALE, height: 1000 * WORLD_SCALE },
};