Spaces:
Sleeping
Sleeping
| // Game dimensions | |
| export const GAME_WIDTH = 256; | |
| export const GAME_HEIGHT = 224; | |
| export const BORDER_OFFSET = 21; // Offset for 21px borders on each side | |
| // Bitmap font character set | |
| export const BITMAP_FONT_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; | |
| // Grid configuration | |
| export const BLOCK_SIZE = 8; // 8x8 pixel blocks for retro feel | |
| export const GRID_WIDTH = 10; | |
| export const GRID_HEIGHT = 20; | |
| export const PLAY_AREA_WIDTH = GRID_WIDTH * BLOCK_SIZE; // 80 pixels | |
| export const PLAY_AREA_HEIGHT = GRID_HEIGHT * BLOCK_SIZE; // 160 pixels | |
| export const PLAY_AREA_X = 80 + BORDER_OFFSET; // Centered with room for UI + border offset | |
| export const PLAY_AREA_Y = 28; // Room for header (moved up 20 pixels from original 48) | |
| // Level progression | |
| export const LINES_PER_LEVEL = 2; // Temporary for testing | |
| export const MAX_LEVEL = 10; | |
| // Tetromino shapes (NES Tetris style) | |
| export const TETROMINOES = { | |
| I: { | |
| shape: [[1, 1, 1, 1]], | |
| color: 0, // Will be replaced with palette color | |
| name: 'I' | |
| }, | |
| O: { | |
| shape: [ | |
| [1, 1], | |
| [1, 1] | |
| ], | |
| color: 1, | |
| name: 'O' | |
| }, | |
| T: { | |
| shape: [ | |
| [0, 1, 0], | |
| [1, 1, 1] | |
| ], | |
| color: 2, | |
| name: 'T' | |
| }, | |
| S: { | |
| shape: [ | |
| [0, 1, 1], | |
| [1, 1, 0] | |
| ], | |
| color: 3, | |
| name: 'S' | |
| }, | |
| Z: { | |
| shape: [ | |
| [1, 1, 0], | |
| [0, 1, 1] | |
| ], | |
| color: 4, | |
| name: 'Z' | |
| }, | |
| J: { | |
| shape: [ | |
| [1, 0, 0], | |
| [1, 1, 1] | |
| ], | |
| color: 5, | |
| name: 'J' | |
| }, | |
| L: { | |
| shape: [ | |
| [0, 0, 1], | |
| [1, 1, 1] | |
| ], | |
| color: 6, | |
| name: 'L' | |
| } | |
| }; | |
| // Advanced mode tetrominoes (includes all classic + new shapes) | |
| export const ADVANCED_TETROMINOES = { | |
| ...TETROMINOES, | |
| // Small L (3 blocks) - top row | |
| SMALL_L: { | |
| shape: [ | |
| [1, 1], | |
| [1, 0] | |
| ], | |
| color: 0, | |
| name: 'SMALL_L' | |
| }, | |
| // Small L mirrored (3 blocks) - top row | |
| SMALL_L_MIRROR: { | |
| shape: [ | |
| [1, 1], | |
| [0, 1] | |
| ], | |
| color: 1, | |
| name: 'SMALL_L_MIRROR' | |
| }, | |
| // U shape (5 blocks) - middle left | |
| U: { | |
| shape: [ | |
| [1, 0, 1], | |
| [1, 1, 1] | |
| ], | |
| color: 2, | |
| name: 'U' | |
| }, | |
| // S shape (4 blocks) - middle right | |
| S_ADVANCED: { | |
| shape: [ | |
| [0, 1, 1], | |
| [1, 1, 0] | |
| ], | |
| color: 3, | |
| name: 'S_ADVANCED' | |
| }, | |
| // 2x2 with extra piece (5 blocks) - bottom left | |
| BLOCK_PLUS: { | |
| shape: [ | |
| [1, 1, 1], | |
| [1, 1, 0] | |
| ], | |
| color: 4, | |
| name: 'BLOCK_PLUS' | |
| }, | |
| // T with top extended (5 blocks) - bottom right | |
| T_EXTENDED: { | |
| shape: [ | |
| [0, 1, 0], | |
| [0, 1, 1], | |
| [0, 1, 0] | |
| ], | |
| color: 5, | |
| name: 'T_EXTENDED' | |
| } | |
| }; | |
| // NES Tetris scoring | |
| export const SCORES = { | |
| SINGLE: 40, | |
| DOUBLE: 100, | |
| TRIPLE: 300, | |
| TETRIS: 1200, | |
| SOFT_DROP: 1, | |
| PERFECT_CLEAR: 10000 // Bonus for clearing entire field | |
| }; | |
| // Game speeds (frames per drop) - Higher = slower | |
| // Smooth progression, gets hard at level 6+ | |
| export const LEVEL_SPEEDS = [ | |
| 90, // Level 1 - relaxed start | |
| 80, // Level 2 | |
| 70, // Level 3 | |
| 60, // Level 4 | |
| 50, // Level 5 | |
| 35, // Level 6 - starts getting hard | |
| 25, // Level 7 | |
| 18, // Level 8 | |
| 12, // Level 9 | |
| 6 // Level 10 - very challenging | |
| ]; | |
| // Level titles for intro screens | |
| export const LEVEL_TITLES = { | |
| 1: 'Low Earth Orbit', | |
| 2: 'Moon Surface', | |
| 3: 'Mars Horizon', | |
| 4: 'Asteroid Belt', | |
| 5: 'Jupiter Storms', | |
| 6: 'Deep Space Station', | |
| 7: 'Nebula Expanse', | |
| 8: 'Binary Star System', | |
| 9: 'Alien Megastructure', | |
| 10: 'Edge of the Universe' | |
| }; | |
| // UI Layout - single panel to the right of play area | |
| export const UI = { | |
| // Panel positioned right of play area with 8px gap between frames | |
| PANEL_X: PLAY_AREA_X + PLAY_AREA_WIDTH + 16, | |
| PANEL_Y: PLAY_AREA_Y, | |
| PANEL_WIDTH: 64, | |
| PANEL_HEIGHT: PLAY_AREA_HEIGHT, | |
| PADDING: 6, | |
| LINE_HEIGHT: 20 | |
| }; | |