Dartomat is an engaging idle/clicker game where you progress from manually throwing darts to operating an automated dart-throwing machine. Inspired by classic idle games like Universal Paperclips, Dartomat offers a satisfying progression loop with multiple upgrade paths, strategic decisions, and rewarding milestones.
- Manual Dart Throwing - Click to throw darts with aim and accuracy mechanics
- Automatic Machine - Unlock and calibrate an automated dart-throwing machine
- Deep Upgrade System - 50+ upgrades across multiple branches
- Combo System - Chain hits for multipliers and bonus rewards
- Prestige Mechanics - Reset for permanent bonuses and new strategies
- Offline Progress - Earn points even when away
- Mobile Friendly - Responsive design with touch support
- Getting Started
- Player Guide
- Game Mechanics
- Upgrade Guide
- Advanced Mechanics
- Development
- Browser Support
- Contributing
- License
Visit dartomat.vercel.app to play instantly in your browser.
# Clone the repository
git clone https://github.com/yourusername/dartomat.git
cd dartomat
# Install dependencies
npm install
# Start development server
npm run dev
# Open http://localhost:5173 in your browserDartomat is structured into distinct phases, each introducing new mechanics and challenges:
You start by manually throwing darts. Each click throws a dart at the board, and your accuracy determines where it lands. Focus on:
- Learning the dartboard layout
- Purchasing early accuracy upgrades
- Building up currency for the machine unlock
At 10,000 points, you unlock the Automatic Dart Machine! This machine throws darts automatically, but requires calibration:
- The machine starts inaccurate and needs tuning
- Invest in machine upgrades for better targeting
- Balance manual throws with machine operation
With a calibrated machine, focus on:
- Maximizing Earnings Per Second (EPS)
- Completing special combinations for bonus rewards
- Unlocking achievements for permanent bonuses
Ready for a fresh start with bonuses? The prestige system allows you to:
- Reset progress for prestige currency
- Earn permanent stat multipliers
- Unlock exclusive prestige upgrades
The dartboard follows the standard layout used in professional darts:
20
5 1
12 18
9 4
14 13
11 6
8 10
16 15
7 2
17
3 19
Segment Sequence (clockwise from top):
20 → 1 → 18 → 4 → 13 → 6 → 10 → 15 → 2 → 17 → 3 → 19 → 7 → 16 → 8 → 11 → 14 → 9 → 12 → 5
Each number segment has three zones:
| Zone | Description | Multiplier |
|---|---|---|
| Single | Outer area | 1x |
| Double | Narrow outer ring | 2x |
| Triple | Narrow inner ring | 3x |
Center Zones:
| Zone | Points |
|---|---|
| Bullseye | 50 points |
| Outer Bull | 25 points |
Points are calculated based on where your dart lands:
Points = Segment Value × Zone Multiplier × Active Multipliers
Examples:
| Hit | Calculation | Points |
|---|---|---|
| Single 20 | 20 × 1 | 20 |
| Double 20 | 20 × 2 | 40 |
| Triple 20 | 20 × 3 | 60 |
| Bullseye | 50 (fixed) | 50 |
| Triple 20 + 2x combo | 20 × 3 × 2 | 120 |
- Focus on Accuracy First - Early accuracy upgrades significantly improve earnings
- Don't Rush the Machine - Manual throwing with good accuracy can be very efficient
- Watch Your EPS - Use the Earnings Per Second metric to evaluate upgrades
- Combo Chains Matter - Consecutive high-value hits build multipliers
- Save for Milestones - Sometimes it's worth saving for a big upgrade
Your performance is governed by four main statistics:
Base Value: 50% (0.5)
Accuracy determines how close your throws land to the intended target. Higher accuracy reduces the deviation/spread of your darts.
Deviation = Base Deviation × (1 - Accuracy)
At 50% accuracy, throws have significant spread. At 90% accuracy, throws are much more precise.
Base Value: 1 throw per second
Throw speed determines how many darts you can throw per second. This directly impacts your potential earnings rate.
Throws Per Second = Base Speed × Speed Multiplier
EPS Potential = Throws Per Second × Average Points Per Throw
Precision represents consistency over time. While accuracy affects individual throws, precision affects how reliably you maintain that accuracy.
Effective Accuracy = Base Accuracy × (1 - Precision Variance)
Higher precision means your accuracy stays consistent rather than fluctuating.
The key metric for measuring overall performance:
EPS = (Total Points Earned in Window) / (Time Window in Seconds)
EPS is tracked over multiple windows:
- 10-second EPS - Immediate performance
- 1-minute EPS - Short-term average
- 5-minute EPS - Long-term average
// Standard segment hit
points = segmentValue × zoneMultiplier
// Where:
// segmentValue = 1-20 (the number hit)
// zoneMultiplier = 1 (single), 2 (double), or 3 (triple)
// Bullseye zones
bullseyePoints = 50 // Inner bull
outerBullPoints = 25 // Outer bulltotalPoints = basePoints × comboMultiplier × upgradeMultiplier × prestigeMultiplierMultipliers increase your point earnings through consistent performance:
Build your combo by hitting high-value segments consecutively:
// Combo increases on:
// - Triple hits (+0.5x)
// - Bullseye (+0.5x)
// - Double hits (+0.25x)
// - Same number consecutive (+0.25x)
// Combo resets on:
// - Miss (off board)
// - Low value hit (depends on upgrades)
// - Time delay between throws
comboMultiplier = 1.0 + (comboLevel × 0.1)
// Max combo level determined by upgradesCertain upgrades provide permanent multipliers to various aspects:
// Example upgrade effects
pointMultiplier = 1.0 + (upgradeLevel × 0.05) // +5% per level
accuracyBonus = baseAccuracy × (1 + upgradeLevel × 0.1) // +10% per levelUnlocked at 10,000 points, the automatic machine throws darts without player input.
| Parameter | Description | Upgrade Path |
|---|---|---|
| Throw Rate | Darts per second | Machine Speed upgrades |
| Base Accuracy | Starting accuracy | Machine Calibration |
| Aim Offset | Target adjustment | Calibration System |
| Throw Force | Consistency | Machine Precision |
| Segment Targeting | Target specific areas | Advanced Targeting |
The machine can be calibrated to improve performance:
// Machine accuracy calculation
machineAccuracy = baseAccuracy + calibrationBonus - segmentDifficulty
// Segment difficulty varies:
// - Single segments: Low difficulty
// - Double ring: Medium difficulty
// - Triple ring: High difficulty
// - Bullseye: Very high difficulty5-7 Tiered Upgrades - Reduces throw deviation
| Level | Name | Effect | Cost Formula |
|---|---|---|---|
| 1 | Steady Hand | -10% deviation | 100 |
| 2 | Focused Aim | -15% deviation | 500 |
| 3 | Sharp Eye | -20% deviation | 2,000 |
| 4 | Eagle Vision | -25% deviation | 8,000 |
| 5 | Perfect Sight | -30% deviation | 25,000 |
| 6 | Zen Focus | -35% deviation | 75,000 |
| 7 | Master's Touch | -40% deviation | 200,000 |
Total Accuracy Improvement: Up to 175% reduction in deviation
Tiered Upgrades - 10-15% increase per level
| Level | Name | Effect | Cost Formula |
|---|---|---|---|
| 1 | Quick Release | +10% speed | 150 |
| 2 | Rapid Fire | +12% speed | 750 |
| 3 | Lightning Arm | +15% speed | 3,000 |
| 4 | Blur Motion | +15% speed | 12,000 |
| 5 | Speed Demon | +15% speed | 40,000 |
Formula:
throwSpeed = baseSpeed × (1 + speedUpgradeBonus)
// At max upgrades: 1 × 1.67 = 1.67 throws/secondTiered Upgrades - Reduces variance over time
| Level | Name | Effect | Cost |
|---|---|---|---|
| 1 | Consistent Form | -10% variance | 200 |
| 2 | Muscle Memory | -15% variance | 1,000 |
| 3 | Practiced Motion | -20% variance | 4,000 |
| 4 | Reliable Rhythm | -25% variance | 15,000 |
| 5 | Clockwork Precision | -30% variance | 50,000 |
8-10 Upgrades - Improves automatic machine performance
| Level | Name | Effect | Cost |
|---|---|---|---|
| 1 | Basic Calibration | +5% machine accuracy | 15,000 |
| 2 | Servo Upgrade | +10% throw consistency | 30,000 |
| 3 | Targeting System | Enable segment targeting | 50,000 |
| 4 | Enhanced Sensors | +15% accuracy | 100,000 |
| 5 | Precision Motors | +10% speed, +10% accuracy | 200,000 |
| 6 | Advanced Algorithms | Better target prediction | 400,000 |
| 7 | Neural Calibration | +20% overall performance | 750,000 |
| 8 | Quantum Targeting | Near-perfect targeting | 1,500,000 |
4-5 Upgrades - Enhances charged throw mechanics
| Level | Name | Effect | Cost |
|---|---|---|---|
| 1 | Power Charge | Unlock power shot | 5,000 |
| 2 | Quick Charge | -20% charge time | 15,000 |
| 3 | Stable Power | +25% power shot accuracy | 40,000 |
| 4 | Surge Release | +50% power shot points | 100,000 |
| 5 | Ultimate Power | -50% cooldown | 250,000 |
Power Shot Mechanics:
// Hold to charge, release to throw
chargeTime = 2.0 seconds (base)
powerMultiplier = 2.0 + (chargeLevel × 0.5)
accuracyPenalty = 0.2 - (upgradeBonus × 0.05)
cooldown = 10 seconds (base)5-6 Upgrades - Enhances multiplier mechanics
| Level | Name | Effect | Cost |
|---|---|---|---|
| 1 | Combo Starter | +0.1x per combo level | 3,000 |
| 2 | Chain Master | Slower combo decay | 10,000 |
| 3 | Multiplier Boost | +25% combo multiplier | 30,000 |
| 4 | Combo Shield | 1 miss protection | 75,000 |
| 5 | Endless Chain | +50% combo multiplier | 150,000 |
| 6 | Perfect Streak | Double points at max combo | 300,000 |
Special dart combinations provide bonus rewards:
| Combination | Description | Bonus |
|---|---|---|
| Triple Twenty x3 | Three consecutive triple 20s | 500 points + 2x multiplier |
| Hat Trick | Three bulls in a row | 300 points + achievement |
| Shanghai | Single, Double, Triple of same number | 400 points |
| High Ton | 3 darts totaling 151+ | 200 points |
| Maximum | Three triple 20s (180) | 1000 points + achievement |
Achievements provide permanent bonuses and track milestones:
| Achievement | Requirement | Reward |
|---|---|---|
| First Blood | Hit your first dart | 10 points |
| Century | Earn 100 points | +1% points permanently |
| Sharpshooter | 10 bulls in one session | +2% accuracy |
| Machine Master | Unlock the machine | +5% machine accuracy |
| Combo King | Reach 10x combo | +5% combo multiplier |
| Point Millionaire | Earn 1,000,000 points | +10% all earnings |
The prestige system allows you to reset progress for permanent bonuses:
prestigePoints = floor(sqrt(totalLifetimePoints / 1000000))Each prestige point can be spent on:
| Bonus | Effect per Point | Max Level |
|---|---|---|
| Starting Points | +100 starting points | 10 |
| Base Accuracy | +1% accuracy | 20 |
| Base Speed | +2% speed | 15 |
| Point Multiplier | +5% points | 25 |
| Machine Head Start | Machine unlocks earlier | 5 |
- Framework: React 19.2 with TypeScript
- Build Tool: Vite 7.2
- State Management: Zustand 5.0
- Styling: CSS3 with CSS Variables
- Rendering: HTML5 Canvas API
dartomat/
├── src/
│ ├── components/ # React UI components
│ ├── hooks/ # Custom React hooks
│ ├── store/ # Zustand state management
│ ├── types/ # TypeScript interfaces
│ ├── utils/ # Utility functions
│ ├── constants/ # Game configuration
│ └── assets/ # SVG and static assets
├── public/ # Static files
└── .automaker/ # Feature specifications
npm run dev # Start development server
npm run build # Build for production
npm run preview # Preview production build
npm run lint # Run ESLint
npm run format # Format with Prettier
npm run typecheck # TypeScript type checking
npm run ci # Full CI pipelineKey configuration values in src/constants/index.ts:
// Game Configuration
SAVE_INTERVAL_MS: 5000 // Auto-save every 5 seconds
FPS_TARGET: 60 // Target frame rate
// Dartboard
SEGMENTS: [20, 1, 18, 4, 13, 6, 10, 15, 2, 17, 3, 19, 7, 16, 8, 11, 14, 9, 12, 5]
BULLSEYE_POINTS: 50
OUTER_BULL_POINTS: 25
DOUBLE_MULTIPLIER: 2
TRIPLE_MULTIPLIER: 3
// Initial Values
STARTING_CURRENCY: 0
BASE_ACCURACY: 0.5 // 50%
BASE_THROW_SPEED: 1 // 1 throw/second| Browser | Minimum Version |
|---|---|
| Chrome | 90+ |
| Firefox | 88+ |
| Safari | 14+ |
| Edge | 90+ |
Performance Target: 60 FPS on mid-range devices
Contributions are welcome! Please read our contributing guidelines:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Use functional components with hooks
- Follow TypeScript strict mode
- Separate game logic from UI
- Write tests for game calculations
- Use conventional commits
This project is licensed under the MIT License - see the LICENSE file for details.