Minify - Egezenn/dota2-minify GitHub Wiki

Minify mod development

File Structure

Read VPK Basics first. You should understand what steam file extensions look like and what the VPK folder is.

In Minify mods are the folders you find in your "mods" directory. Every mod in Minify uses this structure.

ExampleMod
   /files/<files>
   blacklist.txt
   styling.txt
   notes_<locale>.txt

Note

For blacklist mods which replace stuff, add "Mute" or "Remove" words in front of the mod, it'll patch them last to resolve any conflicts.

Tip

Comments are done via # prefix.


files

These are files that will simply be put into the VPK. They should already be compiled.


blacklist.txt

Any paths you add here will be replaced by blank files, it is how you prevent sounds, particles, models, textures...etc from loading into the game.

sounds\ambient\horn_dire.vsnd_c
sounds\ambient\horn_radiant.vsnd_c
  • The supported files that can be replaced are extensions inside the "bin/blank-files" folder of the project.
  • Minify validates you are using correct extensions in your paths.
  • It does not check if the path exists in the VPK so for example if you typed path\to\randomfile.vsnd_c it would still be created and no warnings will be shown so make sure you have no typos.
  • Lines beginning with # are treated as comments

@@ prefix

Adding @@ at the beginning lets you use a URL to fetch paths from your text file online. This is useful if others are using your mods because you wouldn't need to send everyone your updated files.

@@https://www.example.com/blacklist.txt

>> prefix

Adding >> at the beginning will blacklist everything in a folder in the VPK.

>>particles\prime
  • Be careful because dota might be adding files to your blacklisted folders in future updates. So use it on very specific folders that don't add new features.

** prefix

Adding ** at the beginning will blacklist everything using RegExp.

**taunt.*\.vsnd_c
  • Use this feature carefully, otherwise you can end up with too big of a blacklist data.

styling.txt

Apply your own custom CSS to the panorama and any other .vcss files steam uses. Valve Panorama Wiki

Example

panorama\styles\hud\dota_hud_top_bar @@ DOTATopBar{ui-scale: 75%;} #TimeOfDay{ui-scale: 125%;} #TimeOfDayBG{ui-scale: 125%;}
Path Divider Style
panorama\styles\hud\dota_hud_top_bar @@ DOTATopBar{ui-scale: 75%;} #TimeOfDay{ui-scale: 125%;} #TimeOfDayBG{ui-scale: 125%;}
  • Minify validates styling.txt paths exist before extracting.
  • It does not validate your CSS because Panorama uses their own CSS rulesets and a validator would have to be written from scratch. If it doesn't work you probably made a typo. Test how everything looks with the Panorama first.
  • It is possible to link a remote styling.txt like with blacklist.txt
  • By appending ! prefix, you can modify files from the core pak instead of the game pak.

Adding your mod

Simply create a folder in dota2-minify/mods for example MyMod in the format used by Minify.

Source2Viewer

This project requires the binaries of Source2Viewer-CLI. These files are downloaded automatically (on Windows and Linux) when you launch the application.

To get them binaries manually, go to here, download the corresponding CLI archive for your computer and extract the files into your Minify folder.

Compiling Minify

  1. Download Python 3.12+ (any version that is not too new or too old should work)

  2. Install requirements pip install -r requirements.txt

  3. Imitate the release workflow

Using Minify with a different language in Dota2

  1. Go to your Steam Launch Options
  2. Set your launch option to "-language <language of your choosing>"
  3. Navigate to Steam\steamapps\common\dota 2 beta\game\dota_minify
  4. Copy the pak66_dir.vpk file into Steam\steamapps\common\dota 2 beta\game\dota_<language>

Note

You can rename any pakXX_dir.vpk, to any digits of your liking. The pak with the highest number will overwrite/have priority over the previous ones.

You must also have the language pack installed in Windows.

Valid Languages

Language Name
한국어 (Korean) koreana
简体中文 (Simplified Chinese) schinese
繁體中文 (Traditional Chinese) tchinese
Português Brasileiro (Brazilian Portuguese) brazilian
Español latinoamericano (Latin American Spanish) latam
Русский (Russian) russian
Español (Spanish) spanish
Français (French) french
Italiano (Italian) italian
Deutsch (German) german
Ελληνικά (Greek) greek
ไทย (Thai) thai
日本語 (Japanese) japanese
Português (Portuguese) portuguese
Polski (Polish) polish
Dansk (Danish) danish
Nederlands (Dutch) dutch
Suomi (Finnish) finnish
Norsk (Norwegian) norwegian
Svenska (Swedish) swedish
Čeština (Czech) czech
Magyar (Hungarian) hungarian
Română (Romanian) romanian
Български (Bulgarian) bulgarian
Türkçe (Turkish) turkish
Українська (Ukrainian) ukrainian
Tiếng Việt (Vietnamese) vietnamese
⚠️ **GitHub.com Fallback** ⚠️