working draft

This commit is contained in:
2026-05-09 13:41:33 +09:00
parent 1535ed975a
commit 7c370ce507
27 changed files with 756 additions and 265 deletions

View File

@@ -1,81 +1,441 @@
// level config will be in one array
// index 0 = level 1, etc
// edit level change calculations here
// x,y = center position. w, h = width and height of the platform
// level config — one entry per level
// x,y = center w,h = dimensions
// fragment colors match the level color (updated hex values)
// bg → put your PNG in public/backgrounds/levelN.png
// playerImg → put your PNG in public/assets/player_levelN.png
export const LEVELS = [
// ── LEVEL 1: CRIMSON ──────────────────────────────────────────────────────
// platforms and enemies unchanged from original design
{
id: 1,
name: 'The Gray Beginning',
color: '#FF4136',
//bgFar: '/backgrounds/level1_far/png',
//bgMid: '/backgrounds/level1_mid.png',
spawnX: 80,
spawnY: 380,
// each platform: {x,y,w,h}
id: 1,
name: 'Eruption',
color: '#970505',
bg: '/backgrounds/level1.png',
playerImg: '/assets/player_level1.png',
spawnX: 60,
spawnY: 400,
platforms: [
{x: 400, y: 440, w: 800, h: 20}, // ground
{x: 220, y: 360, w: 160, h: 16},
{x: 430, y: 300, w: 140, h: 16 },
{x: 640, y: 240, w: 160, h: 16 },
{x: 320, y: 210, w: 120, h: 16 },
{ x: 400, y: 440, w: 800, h: 12 }, // ground
{ x: 170, y: 370, w: 160, h: 14 }, // left starter
{ x: 390, y: 308, w: 150, h: 14 }, // middle step
{ x: 610, y: 248, w: 150, h: 14 }, // upper right
{ x: 395, y: 188, w: 140, h: 14 }, // top center
],
// each fragment: {x,y,color}
fragments: [
{x: 220, y: 330, color: '#FF4136'},
{x: 430, y: 270, color: '#FF4136'},
{x: 640, y: 210, color: '#FF4136'},
{ x: 170, y: 338, color: '#970505' },
{ x: 390, y: 278, color: '#970505' },
{ x: 610, y: 216, color: '#970505' },
{ x: 395, y: 156, color: '#970505' },
],
// each enemy: {x,y, patrol}
enemies: [
{x: 430, y: 280, patrol: 50},
{ x: 390, y: 283, patrol: 50 },
],
// each puddle: {x, y}
tar: [],
},
// ── LEVEL 2: AMBER ────────────────────────────────────────────────────────
// platforms and enemies unchanged from original design
{
id: 2,
name: 'Warmer skies',
color: '#FF851B',
bgFar: '/backgrounds/level2_far.png',
bgMid: '/backgrounds/level2_mid.png',
spawnX: 80,
spawnY: 380,
name: 'Sunset',
color: '#CF8917',
bg: '/backgrounds/level2.png',
playerImg: '/assets/player_level2.png',
spawnX: 60,
spawnY: 400,
platforms: [
{ x: 400, y: 440, w: 800, h: 20 },
{ x: 180, y: 370, w: 140, h: 16 },
{ x: 380, y: 310, w: 120, h: 16 },
{ x: 560, y: 250, w: 120, h: 16 },
{ x: 700, y: 330, w: 100, h: 16 },
{ x: 300, y: 200, w: 100, h: 16 },
{ x: 400, y: 440, w: 800, h: 12 },
{ x: 160, y: 375, w: 150, h: 14 }, // left low
{ x: 360, y: 318, w: 140, h: 14 }, // center
{ x: 560, y: 260, w: 130, h: 14 }, // right mid
{ x: 710, y: 330, w: 110, h: 14 }, // right island
{ x: 280, y: 238, w: 110, h: 14 }, // upper left — backtrack
{ x: 478, y: 188, w: 110, h: 14 }, // top center
],
fragments: [
{ x: 180, y: 340, color: '#FF851B' },
{ x: 380, y: 280, color: '#FF851B' },
{ x: 300, y: 170, color: '#FF851B' },
{ x: 700, y: 300, color: '#FF851B' },
{ x: 160, y: 343, color: '#CF8917' },
{ x: 710, y: 298, color: '#CF8917' },
{ x: 280, y: 206, color: '#CF8917' },
{ x: 478, y: 156, color: '#CF8917' },
],
enemies: [
{ x: 380, y: 290, patrol: 45 },
{ x: 560, y: 230, patrol: 40 },
{ x: 360, y: 293, patrol: 45 },
{ x: 560, y: 235, patrol: 40 },
],
tar: [
{ x: 150, y: 432 },
{ x: 490, y: 432 },
],
},
// ── LEVEL 3: YELLOW ───────────────────────────────────────────────────────
// two wide wings — left and right — converging at the upper center
{
id: 3,
name: 'Golden',
color: '#E3D214',
bg: '/backgrounds/level3.png',
playerImg: '/assets/player_level3.png',
spawnX: 60,
spawnY: 400,
platforms: [
{ x: 400, y: 440, w: 800, h: 12 },
{ x: 140, y: 372, w: 150, h: 14 }, // left start
{ x: 575, y: 365, w: 150, h: 14 }, // right start (enemy guards)
{ x: 280, y: 302, w: 120, h: 14 }, // left mid
{ x: 510, y: 295, w: 120, h: 14 }, // right mid
{ x: 155, y: 238, w: 110, h: 14 }, // upper left
{ x: 420, y: 228, w: 130, h: 14 }, // upper center (wider, enemy)
{ x: 660, y: 220, w: 110, h: 14 }, // upper right
],
fragments: [
{ x: 280, y: 270, color: '#E3D214' }, // left mid — easy
{ x: 660, y: 188, color: '#E3D214' }, // upper right
{ x: 155, y: 206, color: '#E3D214' }, // upper left
{ x: 420, y: 196, color: '#E3D214' }, // upper center — guarded
],
enemies: [
{ x: 575, y: 340, patrol: 52 },
{ x: 420, y: 203, patrol: 45 },
],
tar: [
{ x: 370, y: 432 },
{ x: 700, y: 432 },
],
},
// ── LEVEL 4: GREEN ────────────────────────────────────────────────────────
// two vertical columns with connecting bridges — forest canopy feel
{
id: 4,
name: 'Greenery',
color: '#39BD1C',
bg: '/backgrounds/level4.png',
playerImg: '/assets/player_level4.png',
spawnX: 60,
spawnY: 400,
platforms: [
{ x: 400, y: 440, w: 800, h: 12 },
{ x: 140, y: 372, w: 130, h: 14 }, // left start (enemy guards)
{ x: 665, y: 365, w: 130, h: 14 }, // right — separated by tar
{ x: 270, y: 305, w: 120, h: 14 }, // center-left mid (enemy guards)
{ x: 510, y: 298, w: 120, h: 14 }, // center-right mid
{ x: 165, y: 242, w: 110, h: 14 }, // upper left
{ x: 380, y: 232, w: 120, h: 14 }, // upper center
{ x: 610, y: 225, w: 110, h: 14 }, // upper right (enemy guards)
{ x: 290, y: 175, w: 95, h: 14 }, // top left
{ x: 520, y: 168, w: 95, h: 14 }, // top right — hardest
],
fragments: [
{ x: 270, y: 273, color: '#39BD1C' }, // center-left mid
{ x: 510, y: 266, color: '#39BD1C' }, // center-right mid
{ x: 380, y: 200, color: '#39BD1C' }, // upper center
{ x: 520, y: 136, color: '#39BD1C' }, // top right — hardest
],
enemies: [
{ x: 140, y: 347, patrol: 40 },
{ x: 270, y: 280, patrol: 38 },
{ x: 610, y: 200, patrol: 36 },
],
tar: [
{ x: 395, y: 432 },
{ x: 610, y: 432 },
],
},
// ── LEVEL 5: CYAN ─────────────────────────────────────────────────────────
// zigzag flow — dips and rises like tide pools
{
id: 5,
name: 'Tidal',
color: '#12B6C8',
bg: '/backgrounds/level5.png',
playerImg: '/assets/player_level5.png',
spawnX: 60,
spawnY: 400,
platforms: [
{ x: 400, y: 440, w: 800, h: 12 },
{ x: 145, y: 378, w: 140, h: 14 }, // left start
{ x: 355, y: 395, w: 115, h: 14 }, // dips down — zigzag
{ x: 540, y: 368, w: 125, h: 14 }, // center right
{ x: 705, y: 348, w: 115, h: 14 }, // far right
{ x: 235, y: 308, w: 110, h: 14 }, // upper left
{ x: 445, y: 295, w: 110, h: 14 }, // upper center (enemy)
{ x: 640, y: 278, w: 115, h: 14 }, // upper right
{ x: 125, y: 248, w: 95, h: 14 }, // high far left — isolated
{ x: 365, y: 235, w: 90, h: 14 }, // high center
{ x: 590, y: 220, w: 90, h: 14 }, // high right (enemy)
{ x: 755, y: 202, w: 80, h: 14 }, // top far right — narrow
],
fragments: [
{ x: 235, y: 276, color: '#12B6C8' }, // upper left
{ x: 640, y: 246, color: '#12B6C8' }, // upper right
{ x: 125, y: 216, color: '#12B6C8' }, // high far left — isolated
{ x: 365, y: 203, color: '#12B6C8' }, // high center
{ x: 755, y: 170, color: '#12B6C8' }, // top far right — hardest
],
enemies: [
{ x: 355, y: 370, patrol: 35 },
{ x: 445, y: 270, patrol: 35 },
{ x: 590, y: 195, patrol: 28 },
],
tar: [
{ x: 265, y: 432 },
{ x: 480, y: 432 },
{ x: 680, y: 432 },
],
},
// ── LEVEL 6: DEEP BLUE ────────────────────────────────────────────────────
// cold, sparse — wider gaps, deliberate platform placement
{
id: 6,
name: 'The Abyss',
color: '#170CB7',
bg: '/backgrounds/level6.png',
playerImg: '/assets/player_level6.png',
spawnX: 60,
spawnY: 400,
platforms: [
{ x: 400, y: 440, w: 800, h: 12 },
{ x: 130, y: 382, w: 125, h: 14 }, // left start
{ x: 675, y: 370, w: 130, h: 14 }, // far right — requires commitment
{ x: 308, y: 355, w: 108, h: 14 }, // center step
{ x: 510, y: 385, w: 105, h: 14 }, // dip right
{ x: 220, y: 302, w: 100, h: 14 }, // upper left
{ x: 455, y: 290, w: 100, h: 14 }, // upper center
{ x: 660, y: 275, w: 110, h: 14 }, // upper right (enemy)
{ x: 105, y: 245, w: 88, h: 14 }, // high far left — isolated
{ x: 358, y: 232, w: 85, h: 14 }, // high center
{ x: 580, y: 215, w: 85, h: 14 }, // high right
{ x: 745, y: 198, w: 80, h: 14 }, // narrow top right
{ x: 268, y: 175, w: 80, h: 14 }, // top left
{ x: 480, y: 165, w: 80, h: 14 }, // very top — hardest
],
fragments: [
{ x: 308, y: 323, color: '#170CB7' }, // center step — warmup
{ x: 220, y: 270, color: '#170CB7' }, // upper left
{ x: 660, y: 243, color: '#170CB7' }, // upper right
{ x: 358, y: 200, color: '#170CB7' }, // high center
{ x: 480, y: 133, color: '#170CB7' }, // very top — hardest
],
enemies: [
{ x: 510, y: 360, patrol: 33 },
{ x: 455, y: 265, patrol: 30 },
{ x: 660, y: 250, patrol: 37 },
{ x: 358, y: 207, patrol: 25 },
],
tar: [
{ x: 230, y: 432 },
{ x: 460, y: 432 },
{ x: 640, y: 432 },
],
},
// ── LEVEL 7: PURPLE ───────────────────────────────────────────────────────
// narrow platforms spiraling up — precision required
{
id: 7,
name: 'Twilight Spire',
color: '#6613BA',
bg: '/backgrounds/level7.png',
playerImg: '/assets/player_level7.png',
spawnX: 60,
spawnY: 400,
platforms: [
{ x: 400, y: 440, w: 800, h: 12 },
{ x: 130, y: 385, w: 115, h: 14 }, // left start
{ x: 308, y: 365, w: 100, h: 14 }, // small step
{ x: 483, y: 390, w: 100, h: 14 }, // dip
{ x: 652, y: 358, w: 115, h: 14 }, // right mid
{ x: 768, y: 300, w: 75, h: 14 }, // narrow far right
{ x: 578, y: 272, w: 88, h: 14 }, // upper right
{ x: 400, y: 295, w: 85, h: 14 }, // upper center
{ x: 220, y: 285, w: 90, h: 14 }, // upper left
{ x: 90, y: 248, w: 80, h: 14 }, // narrow far left
{ x: 320, y: 232, w: 80, h: 14 }, // high center
{ x: 518, y: 215, w: 80, h: 14 }, // high right
{ x: 698, y: 190, w: 78, h: 14 }, // top right — narrow
],
fragments: [
{ x: 652, y: 326, color: '#6613BA' }, // right mid
{ x: 220, y: 253, color: '#6613BA' }, // upper left
{ x: 320, y: 200, color: '#6613BA' }, // high center
{ x: 518, y: 183, color: '#6613BA' }, // high right
{ x: 698, y: 158, color: '#6613BA' }, // top right — hardest
],
enemies: [
{ x: 308, y: 340, patrol: 28 },
{ x: 400, y: 270, patrol: 25 },
{ x: 578, y: 247, patrol: 26 },
{ x: 90, y: 223, patrol: 22 },
],
tar: [
{ x: 200, y: 432 },
{ x: 408, y: 432 },
{ x: 618, y: 432 },
],
},
// ── LEVEL 8: MAGENTA ──────────────────────────────────────────────────────
// energetic grid-like layout with strategic gaps
{
id: 8,
name: 'Neon Bloom',
color: '#C71287',
bg: '/backgrounds/level8.png',
playerImg: '/assets/player_level8.png',
spawnX: 60,
spawnY: 400,
platforms: [
{ x: 400, y: 440, w: 800, h: 12 },
{ x: 155, y: 380, w: 130, h: 14 },
{ x: 338, y: 360, w: 118, h: 14 },
{ x: 513, y: 380, w: 110, h: 14 }, // dip
{ x: 688, y: 358, w: 120, h: 14 },
{ x: 165, y: 308, w: 100, h: 14 }, // upper left
{ x: 365, y: 300, w: 90, h: 14 }, // upper center
{ x: 553, y: 308, w: 100, h: 14 }, // upper right
{ x: 728, y: 278, w: 78, h: 14 }, // narrow far right
{ x: 260, y: 248, w: 90, h: 14 }, // high left
{ x: 448, y: 238, w: 90, h: 14 }, // high center
{ x: 636, y: 222, w: 90, h: 14 }, // high right
{ x: 368, y: 178, w: 80, h: 14 }, // near top
{ x: 553, y: 165, w: 80, h: 14 }, // top — hardest
],
fragments: [
{ x: 165, y: 276, color: '#C71287' }, // upper left
{ x: 728, y: 246, color: '#C71287' }, // narrow far right
{ x: 448, y: 206, color: '#C71287' }, // high center
{ x: 368, y: 146, color: '#C71287' }, // near top
{ x: 553, y: 133, color: '#C71287' }, // top — hardest
],
enemies: [
{ x: 338, y: 335, patrol: 38 },
{ x: 688, y: 333, patrol: 40 },
{ x: 553, y: 283, patrol: 32 },
{ x: 365, y: 275, patrol: 25 },
],
tar: [
{ x: 178, y: 432 },
{ x: 378, y: 432 },
{ x: 558, y: 432 },
{ x: 738, y: 432 },
],
},
// ── LEVEL 9: BROWN ────────────────────────────────────────────────────────
// dense cave — most enemies, hardest single-color level
{
id: 9,
name: 'Deep Caves',
color: '#753F16',
bg: '/backgrounds/level9.png',
playerImg: '/assets/player_level9.png',
spawnX: 60,
spawnY: 400,
platforms: [
{ x: 400, y: 440, w: 800, h: 12 },
{ x: 135, y: 382, w: 128, h: 14 },
{ x: 315, y: 365, w: 112, h: 14 },
{ x: 496, y: 388, w: 108, h: 14 }, // dip
{ x: 660, y: 358, w: 118, h: 14 },
{ x: 200, y: 322, w: 100, h: 14 },
{ x: 400, y: 312, w: 93, h: 14 },
{ x: 578, y: 305, w: 100, h: 14 },
{ x: 738, y: 288, w: 78, h: 14 }, // narrow
{ x: 118, y: 262, w: 88, h: 14 },
{ x: 310, y: 255, w: 88, h: 14 },
{ x: 492, y: 245, w: 88, h: 14 },
{ x: 658, y: 232, w: 88, h: 14 },
{ x: 232, y: 195, w: 78, h: 14 },
{ x: 425, y: 185, w: 78, h: 14 },
{ x: 608, y: 178, w: 78, h: 14 },
],
fragments: [
{ x: 578, y: 273, color: '#753F16' },
{ x: 310, y: 223, color: '#753F16' },
{ x: 658, y: 200, color: '#753F16' },
{ x: 425, y: 153, color: '#753F16' },
{ x: 608, y: 146, color: '#753F16' },
],
enemies: [
{ x: 315, y: 340, patrol: 35 },
{ x: 660, y: 333, patrol: 40 },
{ x: 400, y: 287, patrol: 28 },
{ x: 492, y: 220, patrol: 28 },
{ x: 738, y: 263, patrol: 22 },
],
tar: [
{ x: 152, y: 432 },
{ x: 348, y: 432 },
{ x: 540, y: 432 },
{ x: 712, y: 432 },
],
},
// ── LEVEL 10: THE COLOR REALM — final ────────────────────────────────────
// one fragment per level color — completing this leads to the win screen
{
id: 10,
name: 'The Color Realm',
color: '#FFD700',
bg: '/backgrounds/level10.png',
playerImg: '/assets/player_level10.png',
spawnX: 60,
spawnY: 400,
platforms: [
{ x: 400, y: 440, w: 800, h: 12 },
// row 1 — low
{ x: 120, y: 380, w: 140, h: 14 },
{ x: 310, y: 362, w: 120, h: 14 },
{ x: 510, y: 382, w: 120, h: 14 },
{ x: 700, y: 365, w: 130, h: 14 },
// row 2 — mid
{ x: 210, y: 305, w: 120, h: 14 },
{ x: 420, y: 298, w: 110, h: 14 },
{ x: 628, y: 288, w: 120, h: 14 },
// row 3 — high
{ x: 115, y: 248, w: 100, h: 14 },
{ x: 315, y: 238, w: 95, h: 14 },
{ x: 515, y: 228, w: 95, h: 14 },
{ x: 715, y: 215, w: 90, h: 14 },
// row 4 — top
{ x: 215, y: 178, w: 90, h: 14 },
{ x: 415, y: 168, w: 90, h: 14 },
{ x: 615, y: 160, w: 90, h: 14 },
// row 5 — very top (brown fragment)
{ x: 415, y: 128, w: 80, h: 14 },
],
fragments: [
{ x: 310, y: 330, color: '#970505' }, // crimson
{ x: 700, y: 333, color: '#CF8917' }, // amber
{ x: 210, y: 273, color: '#E3D214' }, // yellow
{ x: 628, y: 256, color: '#39BD1C' }, // green
{ x: 315, y: 206, color: '#12B6C8' }, // cyan
{ x: 715, y: 183, color: '#170CB7' }, // deep blue
{ x: 215, y: 146, color: '#6613BA' }, // purple
{ x: 615, y: 128, color: '#C71287' }, // magenta
{ x: 415, y: 96, color: '#753F16' }, // brown — very top
],
enemies: [
{ x: 120, y: 355, patrol: 45 },
{ x: 510, y: 357, patrol: 40 },
{ x: 420, y: 273, patrol: 35 },
{ x: 628, y: 263, patrol: 42 },
{ x: 515, y: 203, patrol: 30 },
],
tar: [
{ x: 225, y: 432 },
{ x: 390, y: 432 },
{ x: 540, y: 432 },
{ x: 665, y: 432 },
{ x: 760, y: 432 },
],
},
// Levels 35 will follow the same pattern
];
// get level by ID (indexed)
export function getLevel(id){
return LEVELS.find(level => level.id === id)
}
export function getLevel(id) {
return LEVELS.find(level => level.id === id);
}