TILTSCOPE
"See the tilt before the scoreboard does"
AI-powered Comprehensive Assistant Coach that detects player "tilt" in real-time and predicts match outcomes using GRID Esports data
🚀 Live Demo • 📖 Documentation • 🎬 Demo Video
🏆 Sky's the Limit - Cloud9 x JetBrains Hackathon 2025
| Category | Category 1: Comprehensive Assistant Coach |
| Game | VALORANT |
| Data Source | GRID Esports API |
| Live Demo | tiltscope.vercel.app |
🎯 What is TiltScope?
Inspired by Moneyball's Peter Brand, TiltScope is a comprehensive Assistant Coach that merges micro-level player analytics with macro-level strategic review.
Traditional stats like K/D ratios are lagging indicators — they show decline after it's too late. TiltScope solves this by detecting player tilt in real-time using statistical deviation analysis, then predicting its impact on match outcomes with ML.
Core Innovation: Z-Score Tilt Detection
Instead of looking at raw K/D, we compare current performance to each player's historical baseline:
z_score = (current_kd - player_baseline_mean) / player_baseline_std
This reveals performance state before the scoreboard does.
⚡ Features (Matching Category 1 Requirements)
✅ 1. Personalized Player/Team Improvement Insights
TiltScope analyzes individual player data to identify recurring mistakes and statistical outliers:
| Player | Current K/D | Baseline K/D | Z-Score | State | Insight |
|---|---|---|---|---|---|
| OXY | 0.43 | 1.19 | -1.70 | 💀 TILTED | Performing 64% below baseline - mental reset needed |
| v1c | 0.50 | 1.08 | -1.61 | 💀 TILTED | Star player collapsed - review opening pathing |
| mada | 4.20 | 1.24 | +2.79 | 🔥 ON FIRE | Explosive carry - protect this player |
Performance States:
- 🔥 ON FIRE (z > +1.5): Player performing 50%+ above baseline
- 📈 HOT (+0.5 < z < +1.5): Above average performance
- ➖ NORMAL (-0.5 < z < +0.5): Playing at baseline
- 📉 COLD (-1.5 < z < -0.5): Below average - watch closely
- 💀 TILTED (z < -1.5): Player is tilting - intervene NOW
✅ 2. Automated Macro Game Review
TiltScope automatically generates game review agendas highlighting:
- Team Z-Scores: Overall team mental state comparison
- Tilt Progression Tracker: Track how player performance changes across games
- Critical Moments: Identify when tilt began affecting outcomes
- Win Probability Impact: Quantify how tilt affected match result
Example Output (Cloud9 vs NRG - Game 2 Corrode):
GAME REVIEW AGENDA
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Map: Corrode | Score: 2-13 (Loss)
Team Z-Score: -0.97 (TEAM TILTED)
CRITICAL ISSUES:
• OXY (z=-1.70): Star player tilted - 64% below baseline
• v1c (z=-1.61): Secondary carry tilted - 54% below baseline
• Combined impact: 2 of 5 players in TILTED state
OPPONENT ADVANTAGE:
• mada (z=+2.79): ON FIRE - exploited C9 tilt
• NRG Team Z-Score: +1.02 (TEAM HOT)
RECOMMENDATION: Mental reset protocol before Game 3
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 3. Predict Hypothetical Outcomes (What-If Analysis)
TiltScope's Monte Carlo simulation engine answers strategic "what if" questions:
Query: "What if OXY had performed at baseline instead of tilting in Game 2?"
Monte Carlo Simulation (100 iterations): | Scenario | NRG Win Probability | Cloud9 Win Probability | |----------|---------------------|------------------------| | Actual (OXY tilted) | 96.8% | 3.2% | | Simulated (OXY at baseline) | 62.3% | 37.7% | | Tilt Impact | — | +34.5% swing |
Insight: OXY's tilt cost Cloud9 approximately 35% win probability. Recommend reviewing opening duel strategy and mental conditioning.
✅ 4. ML Win Prediction
Ensemble Model Architecture:
prediction = (
0.25 * LogisticRegression + # Interpretable baseline
0.35 * RandomForest + # Non-linear patterns
0.40 * GradientBoosting # Complex interactions
)
Feature Engineering (20 features per game):
- Team averages:
avg_kd,avg_z_score,total_kills,total_deaths - State counts:
tilted_count,hot_count,fire_count - Differentials:
kd_diff,z_score_diff,momentum - Context:
map_encoding,game_number,series_score
Performance: 14/14 games predicted correctly in validation set
🎮 Case Study: Cloud9 vs NRG (VCT Americas 2025)
Match Overview
| Game | Map | Score | Winner | C9 Z-Score | NRG Z-Score | Prediction |
|---|---|---|---|---|---|---|
| 1 | Haven | 13-10 | Cloud9 | +0.62 | -0.30 | C9 97% ✅ |
| 2 | Corrode | 2-13 | NRG | -0.97 | +1.02 | NRG 96.8% ✅ |
| 3 | Lotus | 10-13 | NRG | -0.24 | +0.16 | NRG 94.8% ✅ |
Game 2 Deep Dive - The Tilt Game
Cloud9 Players: | Player | Agent | K/D | Z-Score | State | |--------|-------|-----|---------|-------| | OXY | Neon | 0.43 | -1.70 | 💀 TILTED | | v1c | Omen | 0.50 | -1.61 | 💀 TILTED | | neT | Viper | 0.50 | -0.56 | 📉 COLD | | Xeppaa | Vyse | 0.69 | -0.52 | 📉 COLD | | mitch | Skye | 0.50 | -0.47 | ➖ NORMAL |
NRG Players: | Player | Agent | K/D | Z-Score | State | |--------|-------|-----|---------|-------| | mada | Waylay | 4.20 | +2.79 | 🔥 ON FIRE | | brawk | Sova | 2.57 | +1.24 | 📈 HOT | | s0m | Omen | 1.17 | +0.94 | 📈 HOT | | Ethan | Kay/O | 1.44 | +0.62 | 📈 HOT | | skuba | Viper | 1.00 | -0.50 | ➖ NORMAL |
TiltScope Prediction: NRG 96.8% → ✅ CORRECT
Tilt Progression Across Series
| Player | Game 1 | Game 2 | Game 3 | Trend |
|---|---|---|---|---|
| v1c (C9) | 1.47 📈 | 0.50 💀 | 1.25 ➖ | Recovered |
| OXY (C9) | 1.50 📈 | 0.43 💀 | 1.16 ➖ | Recovered |
| mada (NRG) | 0.75 ➖ | 4.20 🔥 | 1.19 ➖ | Game 2 explosion |
🛠 Tech Stack
| Layer | Technology |
|---|---|
| Backend | Python 3.12, FastAPI, asyncio, httpx |
| ML/Data | scikit-learn, pandas, NumPy |
| Frontend | React 18, Vanilla CSS |
| Deployment | Vercel |
| Data Source | GRID Esports API (VALORANT) |
| IDE | JetBrains PyCharm |
📁 Project Structure
tiltscope/
├── backend/
│ ├── main.py # FastAPI REST API server
│ ├── api/
│ │ └── grid_client.py # GRID Esports API integration
│ └── core/
│ ├── baseline.py # Player baseline calculator (μ, σ)
│ ├── deviation.py # Z-score tilt detection engine
│ ├── features.py # ML feature engineering (20 features)
│ ├── predictor.py # Ensemble ML predictor
│ └── whatif.py # Monte Carlo "What-If" simulator
├── frontend/
│ ├── index.html # Main dashboard (React)
│ └── docs.html # Documentation page
├── requirements.txt # Python dependencies
├── vercel.json # Deployment config
├── LICENSE # MIT License
└── README.md
🚀 Quick Start
Prerequisites
- Python 3.10+
- GRID API Key (Apply here)
Backend Setup
# Clone repository
git clone https://github.com/penguinpecker/tiltscope.git
cd tiltscope
# Create virtual environment
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Set environment variable
export GRID_API_KEY="your_api_key_here"
# Run server
cd backend
uvicorn main:app --reload --port 8000
Frontend
# Open directly in browser
open frontend/index.html
# Or serve locally
cd frontend && python -m http.server 3000
API Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/health |
Health check |
| POST | /api/initialize |
Initialize with team data |
| GET | /api/matches |
List available matches |
| GET | /api/match/{id}/analysis |
Full match analysis with tilt detection |
| GET | /api/whatif/{id}/{game} |
Monte Carlo what-if scenarios |
| GET | /api/demo |
Demo data (no API key needed) |
🔗 Links
| Resource | URL |
|---|---|
| Live Demo | tiltscope.vercel.app |
| Documentation | tiltscope.vercel.app/docs |
| GitHub Repository | github.com/penguinpecker/tiltscope |
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🙏 Acknowledgments
- Cloud9 — For hosting this incredible hackathon
- JetBrains — For world-class developer tools and PyCharm IDE
- GRID Esports — For providing official VALORANT match data
- Moneyball / Peter Brand — For the inspiration that data can reveal what the eye cannot see
🎯 TILTSCOPE
"See the tilt before the scoreboard does"
Built with ❤️ for the Cloud9 x JetBrains Hackathon 2026
Log in or sign up for Devpost to join the conversation.