# Nekomata Okayu Scroller 🐱

A simple and charming pixel art mini-game based on VTuber Nekomata Okayu. A side-scrolling experience where you can control Okayu while she explores a pixelated world with synchronized lyrics.

## 🎮 Controls

- **A / ←** - Move left
- **D / →** - Move right
- **W / ↑** - Jump
- **Rapid A/D alternation** - Lateral dash with smoke effects (alternate left/right quickly)
- **Shift + Direction** - Teleport dash (instant movement with smoke trail)
- **L** - Show/Hide lyrics
- **R** - Restart game

## 🎯 Features

- ✅ **Smooth Movement** - Precise control with fluid animations
- ✅ **Jump Mechanics** - Smooth physics-based jumping with directional momentum
- ✅ **Lateral Dash System** - Rapid movement by alternating left/right keys quickly
- ✅ **Teleport Dash System** - Instant directional movement with Shift + direction keys
- ✅ **Character Animations** - Animated sprites for idle and walking states
- ✅ **Dynamic Direction** - Character faces the direction of movement
- ✅ **Background Music** - Plays music when you click the canvas
- ✅ **Synchronized Lyrics** - Real-time lyrics display synced with the music
- ✅ **Dynamic Background** - Procedurally generated clouds and background objects
- ✅ **Pixel Art Style** - Retro pixelated aesthetic with crisp rendering
- ✅ **Responsive Design** - Adapts to different screen sizes
- ✅ **Game Over Screen** - Displays when the song ends
- ✅ **Restart Functionality** - Press R to restart the game anytime

## 🚀 How to Use

1. **Prepare your assets:**
   - Place your sprite sheet in `assets/sprites.png` (930x614px)
   - Place your music in `assets/music.mp3`
   - Adjust sprite coordinates in `js/player.js` according to your sprite sheet

2. **Open the game:**
   - Simply open `index.html` in your browser
   - Click on the canvas to start the music
   - Start playing!

## 🎨 Customization

### Sprite Coordinates
In `js/player.js`, adjust sprite coordinates according to your sprite sheet:

```javascript
this.sprites = {
    idle: [
        { x: 370, y: 15, w: 24, h: 34 },
        // ... more frames
    ],
    walk: [
        { x: 2, y: 16, w: 24, h: 34 },
        // ... more frames
    ]
};
```

### Game Physics
Adjust these values in `js/player.js`:
- `speed` - Horizontal movement speed
- `width` and `height` - Character size
- Canvas bounds are automatically handled

### Lyrics Synchronization
In `js/lyrics.js`, you can:
- Adjust `timeOffset` to sync lyrics with music
- Modify lyrics data in the `parseLyrics()` method
- Toggle lyrics visibility with the L key

## 📁 Project Structure

```
okayuScroller/
├── index.html              # Main page
├── css/
│   └── styles.css          # Game styles
├── js/
│   ├── game.js             # Main game logic
│   ├── player.js           # Player class
│   ├── input.js            # Input handling
│   ├── lyrics.js           # Lyrics system
│   └── spriteProcessor.js  # Sprite processing
├── assets/
│   ├── sprites.png         # Sprite sheet (930x614px)
│   ├── music.mp3           # Background music
│   ├── font.ttf            # Custom font for lyrics
│   └── favicon.svg         # Game favicon
└── README.md               # This file
```

## 🛠️ Technologies Used

- **HTML5 Canvas** - Game rendering
- **JavaScript ES6+** - Game logic
- **CSS3** - Styling and responsive design
- **SVG** - Favicon creation
- **Pixel art** - Retro visual style

## 🎵 Music Notes

The game expects a `music.mp3` file in the `assets/` folder. Music plays automatically after clicking the canvas (required by modern browser policies).

## 📱 Compatibility

- ✅ Chrome, Firefox, Safari, Edge
- ✅ Mobile devices (responsive)
- ✅ Requires JavaScript enabled
- ✅ Scales automatically to screen size

## 🎮 Game Systems

### Cloud System
- Procedurally generates background clouds
- Configurable spawn rates and movement speeds
- Automatic cleanup of off-screen elements

### Background Object System
- Spawns groups of decorative objects
- Multiple sprite variants for variety
- Configurable group sizes and spacing

### Lyrics System
- Real-time synchronization with music
- Adjustable time offset for perfect sync
- Fade in/out transitions
- Multi-line text wrapping

---

Enjoy playing with Okayu! 🐾
