• Log InLog In
  • Register
Liquid`
Team Liquid Liquipedia
EDT 06:16
CEST 12:16
KST 19:16
  • Home
  • Forum
  • Calendar
  • Streams
  • Liquipedia
  • Features
  • Store
  • EPT
  • TL+
  • StarCraft 2
  • Brood War
  • Smash
  • Heroes
  • Counter-Strike
  • Overwatch
  • Liquibet
  • Fantasy StarCraft
  • TLPD
  • StarCraft 2
  • Brood War
  • Blogs
Forum Sidebar
Events/Features
News
Featured News
Code S RO12 Preview: GuMiho, Bunny, SHIN, ByuN3The Memories We Share - Facing the Final(?) GSL34Code S RO12 Preview: Cure, Zoun, Solar, Creator4[ASL19] Finals Preview: Daunting Task30[ASL19] Ro4 Recap : The Peak15
Community News
Code S RO12 Results + RO8 Groups (2025 Season 2)3Weekly Cups (May 19-25): Hindsight is 20/20?0DreamHack Dallas 2025 - Official Replay Pack8[BSL20] RO20 Group Stage2EWC 2025 Regional Qualifiers (May 28-June 1)37
StarCraft 2
General
The SCII GOAT: A statistical Evaluation The Memories We Share - Facing the Final(?) GSL Is there a place to provide feedback for maps? Code S RO12 Results + RO8 Groups (2025 Season 2) CN community: Firefly accused of suspicious activities
Tourneys
EWC 2025 Regional Qualifiers (May 28-June 1) DreamHack Dallas 2025 RSL: Revival, a new crowdfunded tournament series Last Chance Qualifiers for OlimoLeague 2024 Winter [GSL 2025] Code S:Season 2 - RO12 - Group B
Strategy
Simple Questions Simple Answers [G] PvT Cheese: 13 Gate Proxy Robo
Custom Maps
[UMS] Zillion Zerglings
External Content
Mutation # 475 Hard Target Mutation # 474 Futile Resistance Mutation # 473 Cold is the Void Mutation # 472 Dead Heat
Brood War
General
BW General Discussion Battle.net is not working Will foreigners ever be able to challenge Koreans? BGH auto balance -> http://bghmmr.eu/ Which player typ excels at which race or match up?
Tourneys
[ASL19] Grand Finals [BSL 2v2] ProLeague Season 3 - Friday 21:00 CET [BSL20] RO20 Group D - Sunday 20:00 CET [BSL20] RO20 Group B - Saturday 20:00 CET
Strategy
[G] How to get started on ladder as a new Z player I am doing this better than progamers do.
Other Games
General Games
Monster Hunter Wilds Path of Exile Nintendo Switch Thread Beyond All Reason Battle Aces/David Kim RTS Megathread
Dota 2
Official 'what is Dota anymore' discussion
League of Legends
LiquidLegends to reintegrate into TL.net
Heroes of the Storm
Simple Questions, Simple Answers
Hearthstone
Heroes of StarCraft mini-set
TL Mafia
Vanilla Mini Mafia TL Mafia Community Thread TL Mafia Plays: Diplomacy TL Mafia: Generative Agents Showdown Survivor II: The Amazon
Community
General
US Politics Mega-thread Things Aren’t Peaceful in Palestine Russo-Ukrainian War Thread All you football fans (soccer)! European Politico-economics QA Mega-thread
Fan Clubs
Serral Fan Club
Media & Entertainment
[Manga] One Piece Movie Discussion!
Sports
2024 - 2025 Football Thread Formula 1 Discussion NHL Playoffs 2024 NBA General Discussion
World Cup 2022
Tech Support
Computer Build, Upgrade & Buying Resource Thread Cleaning My Mechanical Keyboard How to clean a TTe Thermaltake keyboard?
TL Community
The Automated Ban List TL.net Ten Commandments
Blogs
Research study on team perfo…
TrAiDoS
I was completely wrong ab…
jameswatts
Need Your Help/Advice
Glider
Trip to the Zoo
micronesia
Poker
Nebuchad
Info SLEgma_12
SLEgma_12
SECOND COMMING
XenOsky
Customize Sidebar...

Website Feedback

Closed Threads



Active: 18438 users

Dota 2 Bot API: The (glut)Initial step

Blogs > LetaBot
Post a Reply
LetaBot
Profile Blog Joined June 2014
Netherlands557 Posts
February 09 2016 21:20 GMT
#1
Creating a Dota 2 Bot API Part 1: The (glut)Initial step
I decided to take a small break from creating my StarCraft bot (Wiki)LetaBot to see how well bots perform in other e-sport titles. While checking the subreddit, I found out that Dota 2 has an offline LAN mode. This got me interested in checking if it was possible to create a bot API for Dota 2 like the one that Matthew Fisher did for StarCraft 2 ( https://graphics.stanford.edu/~mdfisher/GameAIs.html ). The advantages for using this method over the build-in scripting language is that a build-in scripting language is significantly slower than C++ code, and you cannot store/retrieve as much information as your hard drive can handle ( haven't used Dota 2 script, so correct me if I am wrong about Dota 2 script limitations).

The problem with using DirectX interception to create a bot for StarCraft 2 is that you have to use battle.net to play against other players, and Blizzard won't like it if you use DirectX interception on battle.net . After all, DirectX interception allows you to do stuff like this:

[image loading]

Or even more outlandish stuff like this.

But with an offline LAN mode, you don't have to worry about this sort of stuff getting you banned and leaving you with no other options to play versus other players.

The first attempt to get the graphics interceptor was to use the Matthew Fisher's DirectX interceptor on Dota 2, since the interception part of the code doesn't care about the program it is used on ( placing the modified d3d9.dll in the dota2.exe folder makes it load that one instead of the one in system32 ). This doesn't seem to work since dota 2 crashes when it tries to start up the main menu ( probably something involving the shaders that dota 2 uses, as you will see in apitrace below. ). It did manage to store the load screen textures:

[image loading]

So when I contacted Matthew Fisher, he directed me to a different program called apitrace. That one does manage to collect all the directX API calls, but for some reason it has problems with the shaders as well, causing the frame replay to look mostly black ( with only the top/bottom GUI, healthbars and some flame effects visible). So instead I switched to OpenGL. One driver update later I was capable of getting apitrace to record and replay the OpenGL calls.


Some pictures of the success below:


[image loading]

This is the texture of (Wiki)tiny IIRC.

[image loading]

Scene rendering in progress. Notice the checkerboard textures below each hero (and the spells), and the fact that this image is flipped ( vertically, the original image was upside down ).



Since apitrace is open source, this can be use as an initial starting point to use the same technique that Matthew Fisher used to make his StarCraft 2 bot.
Very ( very very ) simply put, the following needs to be added to the apitrace to make it usable for a Dota 2 Bot API:

- Know which texture belongs to which hero. You can look at Matthew Fisher's texture table for StarCraft 2 to see an example of this.

- Know when these textures are drawn, and where on the screen the texture/hero is located ( as in, not on the XY coordinates of the dota 2 map, but the XY coordinates of your monitor ).

- Use the information above to determine when/where to click on the screen. You are basically sending click commands instead of using a physical mouse, just like AutoIt and other related programs do. The difference is that you aren't relying on the color of certain pixels like a simple runescape bot, but on the information that is send through the graphics pipeline (getting this information purely based on the pixels on the screen is too complex for a game like Dota 2: it would take too much time to process and dota 2 is too fast paced for that).


Besides hero location you ofc also need things like the location of creeps, your/ally/enemy health and all that sort of stuff.


Anyway, I am going back to my StarCraft bot now. I still have to wrap up my master thesis on it. If anyone is interested in already starting on developing such an API, you can pm me and I can give you some (OpenGL, graphic pipeline) guides that can help you get started. In general you will need to know about C++ and OpenGL ( general 3d graphics knowledge should suffice as well, it is mainly about extracting information, not programming OpenGL ). I myself will start digging more into this stuff next month (March).
If you cannot win with 100 apm, win with 100 cpm.
Birdie
Profile Blog Joined August 2007
New Zealand4438 Posts
February 09 2016 22:38 GMT
#2
Are you not able to just memory scan for on-screen hero locations and minimap hero locations? Surely this would be far easier than graphics hooks.
Red classic | A butterfly dreamed he was Zhuangzi | 4.5k, heading to 5k as support!
Sn0_Man
Profile Blog Joined October 2012
Tebellong44238 Posts
February 09 2016 22:41 GMT
#3
Interesting

Just out of curiosity, are you aware that valve wrote some of their own bots?

Which of course are quite different since they don't seek to simulate human interaction with the client in any way of course, but still something worth thinking about.
LiquidDota StaffSCIENTISTS BAFFLED | 3275929302
LetaBot
Profile Blog Joined June 2014
Netherlands557 Posts
Last Edited: 2016-02-09 23:19:33
February 09 2016 23:18 GMT
#4
On February 10 2016 07:38 Birdie wrote:
Are you not able to just memory scan for on-screen hero locations and minimap hero locations? Surely this would be far easier than graphics hooks.


That is what the BWAPI does for StarCraft Brood War. However, one update could change all the relevant opcodes, which means that you have to redo the process. Whereas the textures tend to stay the same for each hero after an update. And even if it changes it is just a matter of finding the right texture again instead of having to go trough the entire program looking for the memory adress.

On February 10 2016 07:41 Sn0_Man wrote:
Interesting

Just out of curiosity, are you aware that valve wrote some of their own bots?

Which of course are quite different since they don't seek to simulate human interaction with the client in any way of course, but still something worth thinking about.


Yes, I know about the build-in bots. But those are very easy to defeat. I don't recall them releasing an API to control these bots directly.
If you cannot win with 100 apm, win with 100 cpm.
Ler
Profile Blog Joined August 2012
Germany543 Posts
February 10 2016 08:13 GMT
#5
I am also kinda in bot programming and I was kinda impressed when I read about the Sc2 bot Matthews released. If you continue your work, write about it please
Twitter: @Ler_GG | Facebook: lergg | youtube: lerlolgg | Twitch.tv/gg_nore | #ArtOfSupport
misirlou
Profile Joined June 2010
Portugal3237 Posts
February 10 2016 12:31 GMT
#6
Is it not possible to code bots on dota 2 tools for custom maps?
evanthebouncy!
Profile Blog Joined June 2006
United States12796 Posts
February 10 2016 12:46 GMT
#7
well lemme know once you finished writing an api wrapper

is there a way to canonicalize hero appearance? I imagine it'll be much easier if all the hero appeared the same and not altered by the costumes they wear.
Life is run, it is dance, it is fast, passionate and BAM!, you dance and sing and booze while you can for now is the time and time is mine. Smile and laugh when still can for now is the time and soon you die!
LetaBot
Profile Blog Joined June 2014
Netherlands557 Posts
February 10 2016 13:46 GMT
#8
On February 10 2016 21:31 misirlou wrote:
Is it not possible to code bots on dota 2 tools for custom maps?



It is. But as I mentioned, the scripting language is a lot slower compared to native C++ code. Also you can store/retrieve more data between matches using file I/O . I don't even know if file input/output is possible with the scripting language.

Since dota 2 is quite complex, I don't think that simple scripts are going to be enough to create bots that can defeat top level human players.
If you cannot win with 100 apm, win with 100 cpm.
spamduck101
Profile Joined August 2015
United States8 Posts
February 10 2016 16:19 GMT
#9
Very cool! Keep us posted. I didn't know about Matt's SC2 stuff. That was a fun read.
misirlou
Profile Joined June 2010
Portugal3237 Posts
February 10 2016 20:27 GMT
#10
On February 10 2016 22:46 LetaBot wrote:
Show nested quote +
On February 10 2016 21:31 misirlou wrote:
Is it not possible to code bots on dota 2 tools for custom maps?



It is. But as I mentioned, the scripting language is a lot slower compared to native C++ code. Also you can store/retrieve more data between matches using file I/O . I don't even know if file input/output is possible with the scripting language.

Since dota 2 is quite complex, I don't think that simple scripts are going to be enough to create bots that can defeat top level human players.

I didn't think that was what you meant by "built in scripting language" but it makes sense now. Yeah I guess the scripts are limited that way and I don't see valve adding file I/O support for it since you could basically start distributing a bunch of crap that would harm a system via the workshop.
evanthebouncy!
Profile Blog Joined June 2006
United States12796 Posts
February 11 2016 13:47 GMT
#11
On February 10 2016 22:46 LetaBot wrote:
Show nested quote +
On February 10 2016 21:31 misirlou wrote:
Is it not possible to code bots on dota 2 tools for custom maps?



It is. But as I mentioned, the scripting language is a lot slower compared to native C++ code. Also you can store/retrieve more data between matches using file I/O . I don't even know if file input/output is possible with the scripting language.

Since dota 2 is quite complex, I don't think that simple scripts are going to be enough to create bots that can defeat top level human players.


do we know if the scripting language is turing complete or is it actually very primitive like that of starcraft map editor?
Life is run, it is dance, it is fast, passionate and BAM!, you dance and sing and booze while you can for now is the time and time is mine. Smile and laugh when still can for now is the time and soon you die!
Torte de Lini
Profile Blog Joined September 2010
Germany38463 Posts
January 06 2017 21:45 GMT
#12
Bumping this. Is Letabot still around?
https://twitter.com/#!/TorteDeLini (@TorteDeLini)
Please log in or register to reply.
Live Events Refresh
Road to EWC
09:00
Korea Closed Qualifiers
CranKy Ducklings598
TKL 296
BRAT_OK 196
Rex146
3DClanTV 99
LiquipediaDiscussion
[ Submit Event ]
Live Streams
Refresh
StarCraft 2
TKL 296
BRAT_OK 196
Rex 146
ProTech70
EnDerr 25
StarCraft: Brood War
Calm 4735
Rain 2538
Larva 612
BeSt 533
Pusan 393
Stork 289
PianO 151
ZerO 149
Hyun 74
Last 48
[ Show more ]
Barracks 28
Sacsri 27
Aegong 25
soO 25
ToSsGirL 24
scan(afreeca) 22
Sharp 19
Icarus 14
NaDa 13
JYJ13
IntoTheRainbow 7
SilentControl 4
Bale 3
Dota 2
Dendi4402
XcaliburYe760
Fuzer 288
Counter-Strike
x6flipin126
Heroes of the Storm
Khaldor297
Other Games
singsing2553
DeMusliM516
XaKoH 208
crisheroes61
MindelVK19
Has16
ZerO(Twitch)16
Organizations
StarCraft: Brood War
lovetv 6
StarCraft 2
Blizzard YouTube
StarCraft: Brood War
BSLTrovo
sctven
[ Show 15 non-featured ]
StarCraft 2
• LUISG 27
• Adnapsc2 8
• AfreecaTV YouTube
• intothetv
• Kozan
• IndyKCrew
• LaughNgamezSOOP
• Migwel
• sooper7s
StarCraft: Brood War
• BSLYoutube
• STPLYoutube
• ZZZeroYoutube
League of Legends
• Nemesis2115
• Jankos1945
Other Games
• WagamamaTV375
Upcoming Events
AllThingsProtoss
44m
Road to EWC
5h 44m
BSL Season 20
7h 44m
Bonyth vs Doodle
Bonyth vs izu
Bonyth vs MadiNho
Bonyth vs TerrOr
MadiNho vs TerrOr
Doodle vs izu
Doodle vs MadiNho
Doodle vs TerrOr
Replay Cast
1d 13h
Replay Cast
1d 23h
Bellum Gens Elite
3 days
The PondCast
3 days
Bellum Gens Elite
4 days
Replay Cast
4 days
Bellum Gens Elite
5 days
[ Show More ]
Replay Cast
5 days
CranKy Ducklings
5 days
SC Evo League
6 days
Bellum Gens Elite
6 days
Replay Cast
6 days
SOOP
6 days
Sparkling Tuna Cup
6 days
Liquipedia Results

Completed

Proleague 2025-05-28
DreamHack Dallas 2025
Calamity Stars S2

Ongoing

JPL Season 2
BSL 2v2 Season 3
BSL Season 20
KCM Race Survival 2025 Season 2
NPSL S3
Rose Open S1
CSL Season 17: Qualifier 1
2025 GSL S2
Heroes 10 EU
ESL Impact League Season 7
IEM Dallas 2025
PGL Astana 2025
Asian Champions League '25
ECL Season 49: Europe
BLAST Rivals Spring 2025
MESA Nomadic Masters
CCT Season 2 Global Finals
IEM Melbourne 2025
YaLLa Compass Qatar 2025
PGL Bucharest 2025
BLAST Open Spring 2025

Upcoming

CSL Season 17: Qualifier 2
CSL 17: 2025 SUMMER
Copa Latinoamericana 4
CSLPRO Last Chance 2025
CSLAN 2025
K-Championship
SEL Season 2 Championship
Esports World Cup 2025
HSC XXVII
Championship of Russia 2025
Bellum Gens Elite Stara Zagora 2025
BLAST Bounty Fall 2025
BLAST Bounty Fall Qual
IEM Cologne 2025
FISSURE Playground #1
BLAST.tv Austin Major 2025
TLPD

1. ByuN
2. TY
3. Dark
4. Solar
5. Stats
6. Nerchio
7. sOs
8. soO
9. INnoVation
10. Elazer
1. Rain
2. Flash
3. EffOrt
4. Last
5. Bisu
6. Soulkey
7. Mini
8. Sharp
Sidebar Settings...

Advertising | Privacy Policy | Terms Of Use | Contact Us

Original banner artwork: Jim Warren
The contents of this webpage are copyright © 2025 TLnet. All Rights Reserved.