Skip to content

forest0xia/dota2bot-OpenHyperAI

Repository files navigation

Open Hyper AI (OHA) - Dota 2 Bot Scripts

The most feature-rich custom bot script for Dota 2. Play against bots that actually fight, farm, push, and use items intelligently.

To play: Create a Custom Lobby and select Local Host as the server location. Bots should have names ending with ".OHA" when installed correctly.

Steam Workshop | GitHub | Feature Requests

Screenshot


What Makes This Different

  • 127 heroes supported on Patch 7.41/7.41a - including Largo, Kez, Ringmaster, Invoker, Techies, Meepo, Lone Druid, and more
  • Bots actually play the game - they lane, gank, push towers, defend, farm jungle, take Roshan, and use active items
  • Dynamic difficulty (FretBots mode) - bots get unfair bonuses that scale with difficulty for a real challenge
  • Bots communicate - they announce pushes, defends, Roshan, and respond to your pings with "On my way!" (in 4 languages)
  • 10+ Game modes supported - All pick, Turbo, All random, Captain mode, 1v1 mid, All Random Deathmatch, etc.
  • Customizable everything - bot names, roles, hero picks, bans, item builds, skill builds, and more
  • AI Chatbot - bots chat like real (toxic) players (requires FretBots mode)
  • All roles supported - deterministic position 1-5 lane assignment

Quick Start

  1. Subscribe on Steam Workshop
  2. Create a Custom Lobby with Local Host server
  3. Start the game - bots auto-pick and play

For FretBots mode (harder bots, neutral items, chatbot): Manual installation guide


In-Game Commands

Command Description
!pos X Swap your role with a bot (e.g., !pos 2 for mid)
!Xpos Y Reassign bot positions (e.g., !3pos 5 = 3rd bot plays pos 5)
!pick HERO Pick a hero (!pick sniper, or /all !pick sniper for enemy)
!ban HERO Ban a hero from being picked
!sp XX Set bot language (en, zh, ru, ja)

Use internal hero names if short names overlap (e.g., !pick npc_dota_hero_keeper_of_the_light). Batch commands work too: !pick io; !ban sniper.


Bot Roles & Positioning

Lobby slot order = position assignment (1-5):

Position Lane
Pos 1 (Carry) + Pos 5 (Hard Support) Safe Lane
Pos 2 (Mid) Mid Lane
Pos 3 (Offlane) + Pos 4 (Soft Support) Offlane

Customize picks, bans, and roles in Customize/general.lua.


Customization

What Where
General settings (picks, bans, names, roles) Customize/general.lua
Per-hero settings (items, skills) Customize/hero/viper.lua
FretBots difficulty tuning FretBots/SettingsDefault.lua

Permanent customization (survives Workshop updates): Copy the Customize folder to <Steam/steamapps/common/dota 2 beta/game/dota/scripts/vscripts/game/Customize>.


Game Modes

Supports most game modes (10+) . See full compatibility discussion.


Offline / LAN Play

You can start a bot game directly from the console without network or clicking UI buttons — useful for offline play, LAN parties, or quick testing. See play offline setup guide.


Developer Documentation

This project uses Claude Code for AI-assisted development. The CLAUDE.md file provides task-specific instructions for common operations like patch updates, hero fixes, and adding new heroes.

Key Docs

Document Description
docs/ARCHITECTURE.md Complete codebase architecture, file map, naming conventions, all systems explained
docs/PATCH_UPDATE_GUIDE.md Step-by-step runbook for updating when a new Dota 2 patch drops
docs/BOT_API_REFERENCE.md Comprehensive Valve bot scripting API reference with examples
CLAUDE.md AI coding assistant guide - common tasks, rules, and workflows

Internal Name References

Dota 2 bot scripts use internal code names for heroes, items, and abilities. These are different from the display names you see in-game. When updating builds or fixing bugs, always verify against authoritative sources:

Resource What It Contains
Liquipedia Cheats Page (Item Names) Authoritative list of item_* internal names for all items including neutral items
d2vpkr npc_abilities.txt All ability internal names and KV data
Dota 2 Patch Data API Official patch notes in machine-readable format
Modifier Names (Valve Wiki) modifier_* names for buff/debuff detection

Project Structure

root: <Steam/steamapps/common/dota 2 beta/game/dota/scripts/vscripts>
|
+-- bots/                  All bot Lua scripts
|   +-- hero_selection.lua     Hero picking/banning
|   +-- bot_generic.lua        Per-bot entry point
|   +-- ability_item_usage_generic.lua   Ability/item usage for all heroes
|   +-- item_purchase_generic.lua        Item purchase state machine
|   +-- mode_*_generic.lua     Mode scripts (farm, push, defend, roam, etc.)
|   +-- mode_assemble_generic.lua        Human ping response
|   |
|   +-- BotLib/            Per-hero builds (items, skills, ability logic)
|   |   +-- hero_axe.lua, hero_crystal_maiden.lua, ...
|   |
|   +-- FunLib/            Core libraries and utilities
|   |   +-- jmz_func.lua      Main utility library
|   |   +-- aba_item.lua      Item system
|   |   +-- aba_skill.lua     Skill/ability system
|   |   +-- aba_push.lua      Push logic
|   |   +-- aba_defend.lua    Defend logic
|   |   +-- localization.lua  Chat translations (en/zh/ru/ja)
|   |
|   +-- FretBots/          Enhanced difficulty mode
|   |   +-- SettingsDefault.lua    Difficulty tuning
|   |   +-- SettingsNeutralItemTable.lua   Neutral items + enchantments
|   |
|   +-- Customize/         User-editable settings
|       +-- general.lua    Team-level settings
|       +-- hero/          Per-hero overrides
|
+-- typescript/            TypeScript source for TS-generated Lua files
|   +-- bots/              TS versions (compiled to bots/ via tstl)
|   +-- post-process/      Post-compilation scripts
|
+-- game/                  Valve defaults + permanent customization location
|   +-- Customize/         Copy your Customize/ here to survive updates
|
+-- docs/                  Developer documentation
    +-- ARCHITECTURE.md
    +-- PATCH_UPDATE_GUIDE.md
    +-- BOT_API_REFERENCE.md

Contribute

  • Contributions welcome on GitHub
  • Custom item/skill builds don't need PRs - just tweak locally
  • Future development is in TypeScript for better maintainability
  • Open feature requests

What's Next

  • Current bot playstyle is limited by Valve's API. We need ML/LLM bots like OpenAI Five!
  • Planned improvements:
    • Smarter laning, pushing, ganking
    • Stronger spell casting (Invoker, Rubick, Morphling, etc.)
    • Better support for bugged heroes (Dark Willow, IO, Lone Druid, Muerta, etc.)
    • Full game mode support + ongoing patch fixes
  • Feedback to Valve Dota2 bot team

Useful Resources

Resource Description
Dota2 AI Development Tutorial Comprehensive guide by adamqqq
Valve Bot Scripting Intro Official Valve documentation
Lua Bot APIs (moddota) Community API docs
Liquipedia Cheats (Internal Names) Item/hero/ability code names
npc_abilities.txt Ability metadata
Enums & APIs (moddota) Enum reference
Modifier Names Buff/debuff modifier names

Support


Credits

Built on top of Valve's default bots + contributions from many talented authors:

  • New Beginner AI (dota2jmz@163.com)
  • Tinkering About (ryndrb)
  • Ranked Matchmaking AI (adamqqq)
  • fretbots (fretmute)
  • BOT Experiment (Furiospuppy)
  • ExtremePush (insraq)
  • And all other contributors who made bot games better

About

A beta Dota2 Bot Script aims to provide better bot game experience

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages