• Log InLog In
  • Register
Liquid`
Team Liquid Liquipedia
EDT 16:45
CEST 22:45
KST 05:45
  • 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
[ASL20] Ro24 Preview Pt2: Take-Off7[ASL20] Ro24 Preview Pt1: Runway132v2 & SC: Evo Complete: Weekend Double Feature4Team Liquid Map Contest #21 - Presented by Monster Energy9uThermal's 2v2 Tour: $15,000 Main Event18
Community News
Weekly Cups (Aug 18-24): herO dethrones MaxPax6Maestros of The Game—$20k event w/ live finals in Paris34Weekly Cups (Aug 11-17): MaxPax triples again!13Weekly Cups (Aug 4-10): MaxPax wins a triple6SC2's Safe House 2 - October 18 & 195
StarCraft 2
General
BoxeR's Wings Episode 2 - Fan Translation Greatest Players of All Time: 2025 Update #1: Maru - Greatest Players of All Time A Eulogy for the Six Pool Geoff 'iNcontroL' Robinson has passed away
Tourneys
$5,000 WardiTV Summer Championship 2025 Maestros of The Game—$20k event w/ live finals in Paris $5,100+ SEL Season 2 Championship (SC: Evo) Esports World Cup 2025 Sparkling Tuna Cup - Weekly Open Tournament
Strategy
Custom Maps
External Content
Mutation # 488 What Goes Around Mutation # 487 Think Fast Mutation # 486 Watch the Skies Mutation # 485 Death from Below
Brood War
General
Post ASL20 Ro24 discussion. No Rain in ASL20? BGH Auto Balance -> http://bghmmr.eu/ How do I speak directly to Coinbase?1-(888)-419-97 Recent recommended BW games
Tourneys
[ASL20] Ro24 Group E Small VOD Thread 2.0 [Megathread] Daily Proleagues [ASL20] Ro24 Group F
Strategy
Muta micro map competition Simple Questions, Simple Answers Fighting Spirit mining rates [G] Mineral Boosting
Other Games
General Games
Stormgate/Frost Giant Megathread General RTS Discussion Thread Nintendo Switch Thread Dawn of War IV Path of Exile
Dota 2
Official 'what is Dota anymore' discussion
League of Legends
Heroes of the Storm
Simple Questions, Simple Answers Heroes of the Storm 2.0
Hearthstone
Heroes of StarCraft mini-set
TL Mafia
TL Mafia Community Thread Vanilla Mini Mafia
Community
General
US Politics Mega-thread Russo-Ukrainian War Thread Things Aren’t Peaceful in Palestine The year 2050 European Politico-economics QA Mega-thread
Fan Clubs
INnoVation Fan Club SKT1 Classic Fan Club!
Media & Entertainment
Anime Discussion Thread Movie Discussion! [Manga] One Piece [\m/] Heavy Metal Thread
Sports
2024 - 2026 Football Thread Formula 1 Discussion TeamLiquid Health and Fitness Initiative For 2023
World Cup 2022
Tech Support
Computer Build, Upgrade & Buying Resource Thread High temperatures on bridge(s) Gtx660 graphics card replacement
TL Community
The Automated Ban List TeamLiquid Team Shirt On Sale
Blogs
How Culture and Conflict Imp…
TrAiDoS
RTS Design in Hypercoven
a11
Evil Gacha Games and the…
ffswowsucks
INDEPENDIENTE LA CTM
XenOsky
[Girl blog} My fema…
artosisisthebest
Customize Sidebar...

Website Feedback

Closed Threads



Active: 1043 users

[Guide] How to make Dota 2 custom maps.

Forum Index > Dota 2 General
Post a Reply
aderum
Profile Blog Joined January 2011
Sweden1459 Posts
Last Edited: 2014-01-04 13:44:39
December 27 2013 17:59 GMT
#1
Hi!
The title is currently a little misleading since we wont be making a new Dota 2 custom map/addon, but simply changing around in the Frostivus files to begin with. When and if Valve adds actual custom map support the name will hopefully be more correct.

I first wrote a guide on r/dota2 called "How to make Dota 2 addons", but since I plan to make a couple of different tutorials it will be easier to write it on TL. I also think that more people here are interested in programming and what we might be able to do with custom maps for Dota 2.

I will update this thread when I release more guides, so that when people who are interested in making custom maps have a good place to start. I am no pro in how Dota 2 is built or how to write in Lua, but what I write here is what I have learnt just playing around. So this will not be a place where you can learn how to make a new Dota inside Dota 2, but rather how to get started.

If anyone have something they want to add or change please just write it in the comments and we can create the best thread for making Dota 2 custom maps together.

Other resources
+ Show Spoiler +

https://developer.valvesoftware.com/wiki/Dota_2_Addon_Portal, a portal with a lot of useful information.
https://gist.github.com/RoyAwesome/8019417
http://www.twitch.tv/koreansgrind/c/3493251 Video of `z-machine's pudge wars map (WIP).
http://i.imgur.com/P9pX3MN.jpg Ash47's work with custom UI and spell picking.


Getting Started
+ Show Spoiler +

For now, we will get started by modifying the Frostivus files. If it seems familiar, it is because it is a repost from my r/dota2 guide, i hope this is okay. This guide is just a very breif introduction to where the files are located, and some examples on how we can modify the code.

Language
Frostivus is scripted in language called Lua. Lua can be modified in any test editor, but I have been using a Eclipse IDE called Koneki.

Location
The Frostivus files are located in [Path\To\Steam\steamapps\common\dota 2 beta\dota\addons\frostivus], usually [C:\Program Files (x86)\Steam\steamapps\common\dota 2 beta\dota\addons\frostivus].

Lets get started
Under [\frostivus\scripts\vscripts] you will find a bunch of Lua scripts. We will play around in the file called "frostivus.lua". This is where the main logic resides for the addon.
You will find a bunch of initializing in the beginning of the script, but we will jump past that for now.
We will change something very small, however it will help us a lot when trying to solo the hold out mode.
In the function called "FrostivusGameMode:OnNPCSpawned( keys )", located on the line ~499 there is a if statement that goes:
if spawnedUnit:IsCreature() then
spawnedUnit:SetHPGain( spawnedUnit:GetMaxHealth() * 0.3 )

What we will do to survive more easily is to change every unit that spawns health to 1. This is done by calling the function "SetMaxHealth( 1 )" for a spawned unit. We will do this just after the if statement so that it now reads:
if spawnedUnit:IsCreature() then
spawnedUnit:SetMaxHealth( 1 )
spawnedUnit:SetHPGain( spawnedUnit:GetMaxHealth() * 0.3 )

And thats it! Congratulations, you have now changed your very first Dota 2 addon. Lets make another change so that we dont have to wait so long for the creeps to start spawning.
In the function called "FrostivusGameMode:InitGameMode()" on line ~93 there is a bunch of initialization, but we will scroll down to the line ~158 that reads:
GameRules:SetPreGameTime( 60.0 )

and then simply change the argument to 10.0:
GameRules:SetPreGameTime( 10.0 )


Loading the map in the Dota 2 client
Now to load this awesome personal addon we will simply open up the console in the Dota 2 client and write:

sv_cheats 1;update_addon_paths;dota_local_custom_difficulty 1;dota_local_custom_enable 1;dota_local_custom_game frostivus;dota_local_custom_map frostivus;dota_force_gamemode 15;map frostivus.bsp

you can copy and paste it directly into the console as one line. This will load the map and start your own custom map.


Changing hero abilities
+ Show Spoiler +

This guide will go over how to change the abilities for a hero by changing the files that are associated with a custom map.

The files that we are gonna changes now is under [\frostivus\scripts\npc]. We are gonna change "herolist","npc_abilities_custom", and "npc_heroes_custom". What we are gonna do is to change Pudges meat hook ability. If you have ever played Frostivus you know that Pudge cant be played in that mode, so to begin we will have to add him to the herolist. To do this, just open "herolist" and add
"npc_dota_hero_pudge" "1"

anywhere inside the brackets for "CustomHeroList", preferably on its own row below the last hero name.

Once this is done we can begin to change his abilities. First we will open up "npc_hero_custom" and point pudges meat hook ability to our own custom one (that we will create right after this). Right after the bracket for "DOTAHeroes" write the following:

//=================================================================================================================
// HERO: Pudge
//=================================================================================================================
"npc_dota_hero_pudge_holdout"
{
"override_hero" "npc_dota_hero_pudge"
"Ability1" "pudge_meat_hook_holdout" // Ability 1
"VisionNighttimeRange" "1800" // Range of vision at night time.
}

This will let the game know that we want to override pudge's first ability with our custom one "pudge_meat_hook_holdout". The "VisionNighttimeRange" is set on every hero in frostivus so we will just also add that.

Now lets create the custom ability. Open up "npc_abilities_custom", and anywhere inside the brackets below the "Version" "1" write the following:


//=================================================================================================================
// Holdout: Hook
//=================================================================================================================
"pudge_meat_hook_holdout"
{
// General
//-------------------------------------------------------------------------------------------------------------
"BaseClass" "pudge_meat_hook"
"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT"
"AbilityUnitDamageType" "DAMAGE_TYPE_PURE"

// Casting
//-------------------------------------------------------------------------------------------------------------
"AbilityCastRange" "1300 1300 1300 1300"
"AbilityCastPoint" "0.3 0.3 0.3 0.3"

// Time
//-------------------------------------------------------------------------------------------------------------
"AbilityCooldown" "2.0 2.0 2.0 2.0"

// Damage.
//-------------------------------------------------------------------------------------------------------------
"AbilityDamage" "500 500 500 500"

// Cost
//-------------------------------------------------------------------------------------------------------------
"AbilityManaCost" "20 20 20 20"

// Special
//-------------------------------------------------------------------------------------------------------------
"AbilitySpecial"
{
"01"
{
"var_type" "FIELD_FLOAT"
"hook_speed" "2500.0"
}
"02"
{
"var_type" "FIELD_INTEGER"
"hook_width" "500"
}
"03"
{
"var_type" "FIELD_INTEGER"
"hook_distance" "1300 1300 1300 1300"
}
"04"
{
"var_type" "FIELD_INTEGER"
"vision_radius" "500 500 500 500"
}
"05"
{
"var_type" "FIELD_FLOAT"
"vision_duration" "4.0 4.0 4.0 4.0"
}
}
}


It is important that the name above the bracket, "pudge_meat_hook_holdout", is the same as the name we wrote in "npc_heroes_custom". A lot of stuff is going on here, but most names are self explanatory so i will not go through them all. But to summarize this will give meat hook some of the following attributes:
  • The cast range will always be 13000
  • The cool down will always be 2 seconds
  • It will always to 500 pure damage
  • It will always cost 20 mana
  • The vision raduis will always be 500
  • etc

I found out what to write for this ability by downloading the files listed here (by IceFrog himself), so that I could find the template for pudge's abilities (in "npc_abilities"). In that file we can also find out that "DOTA_ABILITY_BEHAVIOR_POINT" means that "Ability can be cast anywhere the mouse cursor is (If a unit is clicked it will just be cast where the unit was standing)"

When all this is done, you can load the map thorugh the console (see "Getting started" for the commands), and you will now be able to pick Pudge with your very own custom ability.

Now if you have loaded the game and picked pudge you will notice that the hook ability lacks any description. So lets create our own customized description also. Under [frostivus\resource] there is a bunch of files name "frostivus_languageX". Open the file with the language that your Dota is using. Add the following inside the "tokens" brackets:

"DOTA_Tooltip_ability_pudge_meat_hook_holdout" "Meat Hook"
"DOTA_Tooltip_ability_pudge_meat_hook_holdout_Description" "Throws a hook greater than the frog himself."
"DOTA_Tooltip_ability_pudge_meat_hook_holdout_Lore" "Some say he first started throwing his hook when the Queen of Pain first blinked away."
"DOTA_Tooltip_ability_pudge_meat_hook_holdout_damage" "Damage:"


this will make the description look like this in game:

[image loading]

Crazy people dont sit around and wonder if they are insane
Ayaz2810
Profile Joined September 2011
United States2763 Posts
December 27 2013 18:12 GMT
#2
I'm not sure I understand the point. While this is definitely neat, what practical use does it have? Can you manually add Pudge to Wraith Night or something by doing this?
Vrtra Vanquisher/Tiamat Trouncer/World Serpent Slayer
aderum
Profile Blog Joined January 2011
Sweden1459 Posts
December 27 2013 18:16 GMT
#3
On December 28 2013 03:12 Ayaz2810 wrote:
I'm not sure I understand the point. While this is definitely neat, what practical use does it have? Can you manually add Pudge to Wraith Night or something by doing this?


This is mostly to show people how to get started with creating/modifying custom maps for when they release it for real. You can manually add Pudge to your own local game of wraith night. This is just for people who are interested and want to start learning before they release the full support.
Crazy people dont sit around and wonder if they are insane
Ayaz2810
Profile Joined September 2011
United States2763 Posts
December 27 2013 18:27 GMT
#4
On December 28 2013 03:16 aderum wrote:
Show nested quote +
On December 28 2013 03:12 Ayaz2810 wrote:
I'm not sure I understand the point. While this is definitely neat, what practical use does it have? Can you manually add Pudge to Wraith Night or something by doing this?


This is mostly to show people how to get started with creating/modifying custom maps for when they release it for real. You can manually add Pudge to your own local game of wraith night. This is just for people who are interested and want to start learning before they release the full support.


Ahhh. I wasn't aware modding/custom maps were being implemented with full Valve support. That makes this far more awesome.
Vrtra Vanquisher/Tiamat Trouncer/World Serpent Slayer
Emperor J
Profile Joined January 2014
Netherlands2 Posts
January 23 2014 16:10 GMT
#5
Looks cool, I just registered so I can follow this thread
kimberker
Profile Joined December 2014
1 Post
December 07 2014 18:50 GMT
#6
I cant find the frostivus map through [C:\Program Files (x86)\Steam\steamapps\common\dota 2 beta\dota\addons\frostivus].
There is no addons folder in my dota folder.
Please log in or register to reply.
Live Events Refresh
Next event in 3h 15m
[ Submit Event ]
Live Streams
Refresh
StarCraft 2
mouzHeroMarine 462
IndyStarCraft 184
UpATreeSC 166
ProTech100
JuggernautJason72
StarCraft: Brood War
Calm 2851
ggaemo 235
BeSt 136
Dewaltoss 89
EffOrt 86
Mind 31
Aegong 30
scan(afreeca) 22
Sacsri 9
Bale 8
[ Show more ]
HiyA 6
Dota 2
capcasts174
Counter-Strike
Stewie2K771
taco 412
Foxcn128
Heroes of the Storm
Liquid`Hasu515
Other Games
FrodaN4765
Grubby2192
C9.Mang0123
Trikslyr74
Mew2King54
PPMD25
ViBE14
Organizations
StarCraft 2
angryscii 28
Blizzard YouTube
StarCraft: Brood War
BSLTrovo
sctven
[ Show 22 non-featured ]
StarCraft 2
• StrangeGG 32
• davetesta24
• LUISG 20
• Reevou 4
• Kozan
• sooper7s
• AfreecaTV YouTube
• intothetv
• Migwel
• IndyKCrew
• LaughNgamezSOOP
StarCraft: Brood War
• blackmanpl 63
• 80smullet 24
• iopq 1
• STPLYoutube
• ZZZeroYoutube
• BSLYoutube
League of Legends
• Doublelift3001
• TFBlade940
Counter-Strike
• imaqtpie1124
Other Games
• WagamamaTV374
• Shiphtur149
Upcoming Events
Replay Cast
3h 15m
LiuLi Cup
14h 15m
MaxPax vs TriGGeR
ByuN vs herO
Cure vs Rogue
Classic vs HeRoMaRinE
Cosmonarchy
19h 15m
OyAji vs Sziky
Sziky vs WolFix
WolFix vs OyAji
Big Brain Bouts
19h 15m
Iba vs GgMaChine
TriGGeR vs Bunny
Reynor vs Classic
Serral vs Clem
BSL Team Wars
22h 15m
Team Hawk vs Team Dewalt
BSL Team Wars
22h 15m
Team Hawk vs Team Bonyth
Code For Giants Cup
1d 1h
SC Evo League
1d 15h
TaeJa vs Cure
Rogue vs threepoint
ByuN vs Creator
MaNa vs Classic
Maestros of the Game
1d 19h
ShoWTimE vs Cham
GuMiho vs Ryung
Zoun vs Spirit
Rogue vs MaNa
[BSL 2025] Weekly
1d 21h
[ Show More ]
SC Evo League
2 days
Maestros of the Game
2 days
SHIN vs Creator
Astrea vs Lambo
Bunny vs SKillous
HeRoMaRinE vs TriGGeR
BSL Team Wars
2 days
Team Bonyth vs Team Sziky
BSL Team Wars
2 days
Team Dewalt vs Team Sziky
Monday Night Weeklies
3 days
Replay Cast
4 days
Sparkling Tuna Cup
4 days
LiuLi Cup
5 days
Replay Cast
6 days
The PondCast
6 days
RSL Revival
6 days
Maru vs SHIN
MaNa vs MaxPax
Liquipedia Results

Completed

CSL Season 18: Qualifier 1
uThermal 2v2 Main Event
HCC Europe

Ongoing

Copa Latinoamericana 4
BSL 20 Team Wars
KCM Race Survival 2025 Season 3
BSL 21 Qualifiers
ASL Season 20
Acropolis #4 - TS1
CSL Season 18: Qualifier 2
SEL Season 2 Championship
BLAST Open Fall Qual
Esports World Cup 2025
BLAST Bounty Fall 2025
BLAST Bounty Fall Qual
IEM Cologne 2025
FISSURE Playground #1
BLAST.tv Austin Major 2025

Upcoming

CSL 2025 AUTUMN (S18)
LASL Season 20
BSL Season 21
BSL 21 Team A
Chzzk MurlocKing SC1 vs SC2 Cup #2
RSL Revival: Season 2
Maestros of the Game
EC S1
Sisters' Call Cup
Skyesports Masters 2025
IEM Chengdu 2025
PGL Masters Bucharest 2025
MESA Nomadic Masters Fall
Thunderpick World Champ.
CS Asia Championships 2025
ESL Pro League S22
StarSeries Fall 2025
FISSURE Playground #2
BLAST Open Fall 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.