|
| 1 | +# RainingKeys (Python) |
| 2 | + |
| 3 | +**A high-performance, external rhythm game input visualizer.** |
| 4 | + |
| 5 | +RainingKeys is a purely external overlay application that visualizes keyboard inputs as falling bars, similar to the "Rain" mode found in various rhythm game mods. It provides visual feedback on rhythm stability, micro-jitter, and input timing without injecting code into the game process. |
| 6 | + |
| 7 | +> [!NOTE] |
| 8 | +> This project is a **standalone external tool**. It is **NOT** a game mod and does **NOT** perform DLL injection or memory hooking. It is safe to use with anti-cheat software that permits external overlays. |
| 9 | +
|
| 10 | +--- |
| 11 | + |
| 12 | +## Features |
| 13 | + |
| 14 | +- **External Overlay**: Runs as a transparent, always-on-top, click-through window over any game. |
| 15 | +- **Accurate Timing**: Uses high-resolution monotonic clocks (`time.perf_counter`) for smooth, jitter-free falling animation. |
| 16 | +- **Lane System**: Configurable key-to-lane mapping (e.g., WASD, Space, Enter). |
| 17 | +- **Long Press Support**: Visualizes held keys with variable-length bars. |
| 18 | +- **Performance Optimized**: Implements object pooling and efficient rendering logic to minimize CPU/GPU usage. |
| 19 | +- **Fade Out**: Distance-based fade-out for visual clarity. |
| 20 | +- **Input Latency Compensation**: Configurable offset to visually align inputs with audio latency. |
| 21 | + |
| 22 | +## Tech Stack |
| 23 | + |
| 24 | +- **Python 3.10+** |
| 25 | +- **PySide6 (Qt)**: High-performance rendering and window management. |
| 26 | +- **pynput**: Global low-level keyboard hook. |
| 27 | +- **pywin32**: Windows API integration for transparency and click-through flags. |
| 28 | + |
| 29 | +## Project Structure |
| 30 | + |
| 31 | +``` |
| 32 | +RainingKeysPython/ |
| 33 | +├── core/ |
| 34 | +│ ├── config.py # User configuration (Keys, speeds, colors) |
| 35 | +│ ├── input_mon.py # Global input listener |
| 36 | +│ └── overlay.py # Main rendering loop and window logic |
| 37 | +├── main.py # Application entry point |
| 38 | +└── requirements.txt # Dependencies |
| 39 | +``` |
| 40 | + |
| 41 | +## Installation |
| 42 | + |
| 43 | +1. **Prerequisites**: Ensure you have Python 3.10 or newer installed. |
| 44 | +2. **Clone the repository** (or download source): |
| 45 | + ```bash |
| 46 | + git clone https://github.com/your-username/RainingKeysPython.git |
| 47 | + cd RainingKeysPython |
| 48 | + ``` |
| 49 | +3. **Install dependencies**: |
| 50 | + ```bash |
| 51 | + pip install -r requirements.txt |
| 52 | + ``` |
| 53 | + |
| 54 | +## Usage |
| 55 | + |
| 56 | +1. Run the application: |
| 57 | + ```bash |
| 58 | + python main.py |
| 59 | + ``` |
| 60 | +2. The overlay will appear (default: full screen transparent window). |
| 61 | +3. Press the configured keys (Default: `a`, `s`, `l`, `;`) to see the visualization. |
| 62 | +4. The Debug Overlay in the top-left corner shows FPS and object pool stats. |
| 63 | +5. **To Exit**: Press `Ctrl+C` in the terminal window. |
| 64 | + |
| 65 | +## Configuration |
| 66 | + |
| 67 | +Edit `core/config.py` to customize the overlay: |
| 68 | + |
| 69 | +| Parameter | Description | |
| 70 | +| :--- | :--- | |
| 71 | +| `SCROLL_SPEED` | Falling speed in pixels per second. | |
| 72 | +| `LANE_MAP` | Dictionary mapping specific keys (e.g., `'a'`, `'Key.space'`) to lane indices. | |
| 73 | +| `BAR_WIDTH` | Visual width of the falling notes. | |
| 74 | +| `INPUT_LATENCY_OFFSET` | Seconds to offset rendering (useful for audio sync). | |
| 75 | +| `MAX_BARS` | Soft limit for the object pool (prevents memory leaks). | |
| 76 | +| `COLORS` | RGBA values for bars and text. | |
| 77 | + |
| 78 | +## Roadmap |
| 79 | + |
| 80 | +- [ ] Interactive Configuration UI (GUI for settings) |
| 81 | +- [ ] Save/Load config from JSON/YAML |
| 82 | +- [ ] Multi-monitor support |
| 83 | +- [ ] Custom skins/textures for bars |
| 84 | + |
| 85 | +## Disclaimer |
| 86 | + |
| 87 | +This software is an unofficial community tool. It is not affiliated with, endorsed by, or connected to 7th Beat Games (developers of A Dance of Fire and Ice) or any other game developer. Use responsibly. |
| 88 | + |
| 89 | +## License |
| 90 | + |
| 91 | +MIT License. See `LICENSE` for details. |
0 commit comments