From Valve Developer Community

Differences in the Dota 2 Workshop Tools between the Alpha and Beta releases.

Panorama Game UIs

See: Dota 2 Workshop Tools/Panorama

Added support for custom in-game UI using the new Panorama UI system.

Valve-Provided UI

See: Dota 2 Workshop Tools/Panorama/Valve Provided UI

Added several example UIs that can be used in an addon or as a starting point for totally custom UI.

Lua API

Features

Lua Abilities and Modifiers

See: Dota 2 Workshop Tools/Lua Abilities and Modifiers

Abilities and modifiers can now be defined in Lua.

Modifiers are now exposed to Lua.

Script Filters

See: Dota 2 Workshop Tools/Script Filters

Added ability to intercept and modify pending game actions with script filters.

Script Bindings

Added a number of script bindings:

GameRules:IsGamePaused()

PlayerResource:GetPlayerCount()

PlayerResource:GetTeamPlayerCount()

PlayerResource:GetPlayerCountForTeam()

PlayerResource:SetCustomPlayerColor()

CreateTempTree() - Create temporary trees

- Create temporary trees GridNav:DestroyTreesAroundPoint() - Destroy trees around a point

- Destroy trees around a point GridNav:GetAllTreesAroundPoint() - Get all the trees around a point

- Get all the trees around a point SetPrimaryAttribute() - Set Primary Attribute on a hero

- Set Primary Attribute on a hero ResolveNPCPositions() - Resolve potential collisions between NPCs moved by code

- Resolve potential collisions between NPCs moved by code EmitSoundOnLocationWithCaster() - Emit a sound on a location related to a specific NPC

- Emit a sound on a location related to a specific NPC MinimapEvent() - Create Minimap Events, such as pings and teleports

- Create Minimap Events, such as pings and teleports GameMode:SetCustomGameForceHero() - Force hero selection

- Force hero selection IsClone() - Check whether a hero is a Meepo clone

- Check whether a hero is a Meepo clone SendOverheadEventMessage() - Show overhead XP/Gold notices

- Show overhead XP/Gold notices UpgradeToFlyingCourier()

DOTA_TEAM_COUNT

Functions for controlling the maximum and minimum attack speed values

Functions for starting and removing gesture animations on Dota NPCs. Function names: StartGesture() , RemoveGesture()

, Custom game events now pass a second argument which contains the PlayerID. Example:

function MyAddonName:OnButtonPressed( eventSourceIndex, data ) local nPlayerID = data.PlayerID end

Exposed the enum DOTAConnectionState_t to Lua script. PlayerResource:GetConnectionState() can now be compared to constants:

DOTA_CONNECTION_STATE_UNKNOWN DOTA_CONNECTION_STATE_NOT_YET_CONNECTED DOTA_CONNECTION_STATE_CONNECTED DOTA_CONNECTION_STATE_DISCONNECTED DOTA_CONNECTION_STATE_ABANDONED DOTA_CONNECTION_STATE_LOADING DOTA_CONNECTION_STATE_FAILED

Fixes

Fixed bug where skipping an ability slot ignores precaching.

Fixed datadriven abilities not being able to set the proper modifier states

The ReplaceHeroWith function now puts the new unit at the old unit's origin, instead of spawning it on a player_start location.

Data-Driven Abilities

Features

Datadriven RunScript keys now contain "event_ability" field for cases where an ability is causing a trigger of some kind (i.e. OnAbilityExecuted)

Fixes

Fixed bug where "OnAbilityPhaseInterrupted" did not trigger.

Fixed several fields not respecting the %<var_name> format for variables in datadriven items

Fixed a bad interaction that could occur between OnSpellStart and OnAbilityPhaseStart

Gameplay Features

Custom Hud Elements

See: Dota_2_Workshop_Tools/Panorama#Custom_Hud_Elements

Added a simple API for toggling Panorama HUD elements from Lua code.

Custom Game Setup

See: Dota 2 Workshop Tools/Custom Game Setup

Added new game state for custom game setup (happens before hero selection - intended for team selection, mode voting, etc.)

Custom game player IDs aren't guaranteed to follow the 'TeamPlayer' convention that normal Dota does (where Radiant and Dire players have IDs 0..9)

Added game events 'dota_team_player_list_changed' (fired when player count or team assignment changes) and 'dota_player_details_changed' (fired when playerid or name changes)

Custom Game Events

See: Dota 2 Workshop Tools/Custom Game Events

Added support for Custom Game Events - named dynamic events intended for use by mods and addons, each event gets an arbitrary table for argument passing

Custom Nettables

See: Dota 2 Workshop Tools/Custom Nettables

Added the ability for custom games to easily network custom data from server to client

Custom Healthbar Colors

Added support for overriding the healthbar rendering color of a team's units (compared to the default behavior of "green = my team, red = enemy")

Exposed to script as SetTeamCustomHealthbarColor( teamNumber, r, g, b ) / ClearTeamCustomHealthbarColor( teamNumber )

Minimap Icons

Added ability to disable team tinting for minimap icons

Fixed bug where custom minimap textures didn't always have valid UV coords

Added 'addon_hud_textures.txt' file for addons to register custom minimap icons

Game Code

Updated the game code to 6.84c

Truesight only grants detection to the team which owns the truesight modifier. Disabling invisibility, for example Dust of Appearance, continues to reveal invisible targets to all teams.

The maximum number of trees a map can have has been increased to 8191.

Removed various assumptions about the ground and water height that caused some gameplay systems to work incorrectly on custom maps.

Charge-based abilities and items can now be refreshed with the -refresh command and cast freely with the -wtf command.

Workshop Manager Tool

See: Dota_2_Workshop_Tools/Workshop_Manager

Added a tool to easily upload your custom game to the workshop

PET / Particles

Particle Copy/Move Tool

See: Dota 2 Workshop Tools/Particle Copy Tool

Initial version of a tool to copy/move particle system definitions (and their children)

Features

It is now possible to select preview models to insert into the particle preview. These models will be queried when doing particle operations that use models, such as spawning particles inside hitboxes.

Added controls to the preview to allow you to render hitbox sets, attachment points and names, to animate the preview model with a specified sequence, and to use economy-based wearable items or sets with the preview model.

Added controls to the control point editor to allow you to attach control points to the preview model's origin or attachment points.

Added code to auto-connect control points to preview model attachment points when you load a particle system attached to an economy item that is currently being previewed and which uses that particle system.

Added two new sequence combine modes: SEQUENCE_COMBINE_MODE_REPLICATE_COLOR_0, SEQUENCE_COMBINE_MODE_REPLICATE_COLOR_1

Better particle stats (cur/max/alloc for both system and total particle hierarchy)

F10 now switches back and forth between the engine and active tool

Added "will not end on stop" warning to S2 PET a-la S1 PET

PET property editor will highlight attributes that differ from their default, and has a right-click option to reset to default

PET property editor will hide advanced attributes by default (Reveal with "Show Hidden Attributes" button)

Added "Lock Preview System" button to allow eg. previewing a parent while editing a child

Added control point position & orientation locking

Relaxed function list UI to allow multiple operators from the same group (but warn)

Added ability to horizontally flip the particle rendering in the render_projected operator

Added support for PARTICLE_SHADER_ORIENTATION_SCREEN_Z_ALIGNED particle orientation type

Double clicking a child particle system preview now opens it.

Fixes

Fixed bugs with control point controls where sometimes the data there would not correctly be reflected in the particle preview

Fixed crash when attempting to set a particle system as its own child.

Fixed crash when editing certain particle systems while they are also being used in game.

Fixed crash when attempting to use Scratch Float 1 or Scratch Float 2.

Fixed sequence selection in PET. Sequence picker is now aware of your blend mode and will show the color/alpha/both for either sequence as appropriate.

Fixed color picker stopping Pet rendering when active

Fixed regression where systems wouldn't restart when switching between sessions

Fixed crash in InitSkinnedPositionFromCPSnapshot when a model has no hitboxes

Fixed occasional crash in PET when editing child systems

Fixed crashes when creating an infinite cycle of parent -> child particle systems

Fixed perf stalls on low-end machines when using Render Projected particle render operator

Fixed bug with models not rendering in model render operator

Fixed a number of bugs in particle operators and renderers

Hammer

Features

Added support for multiple layers in the tile editor which can be dyamically toggled at runtime.

Added destruction mode to tile editor path tool.

Added the ability to preview light info entities by selecting them.

Added option to only paint on flat surfaces when using the tile editor blend tool.

Modified the way path blending works in the tile editor so that it is now possible to paint over paths while using the blend tool.

Added ability to show the path preview while using the blend brush in the tile editor.

Removed restriction from tile editor where only single height tiles could be directly next to water.

Changed behavior of applying tile sets by using the height brush so that the tile set of a single tile can be modified.

Added the ability to hide all trees, plants or props in the tile editor.

Added lasso selection to tile editor enable / disable mode.

Modulate Specular By Alpha feature. Meshes in hammer can now have an "Alpha" key which will modulate the specular contribution by this alpha amount if you set "Modulate Specular By Alpha" on the material.

Fixes

Fixed crash when dragging certain particle effects into hammer.

Made optimizations to reduce the size of compiled maps built with the tile editor.

Made tile editor tree detail placement smarter so that details are not added where they will not be visible.

Added pass to map compile which automatically fixes seams between tiles.

Fixed bug where overlays incorrectly applied to water surfaces.

Fixed the size of automatically generated minimaps when reducing the size of map by hiding tiles.

Fixed a bug with some props not showing up in engine after map compile

Material Editor

Features

Expose detail 1 tint color to the material author. This also allows us to assign expressions to it in the material.

Fixes

Fixed a bug where material preview was not showing transparency correctly in some cases

Fixed problem where materials referring to PSDs that had multiple alpha channels would sometimes be compiled in such a way that the wrong alpha channel was used. The compiler will now preferentially look for channels labelled 'alpha' to use in compilation.

Sound

Fixed a bug that caused some sounds to not play

Fixed a bug that caused some sounds to stop early (e.g. mp3s that had their pitch shifted up)

Fixed music

Fixed some cases where sound volumes used fixed precision rather than floating point

Reduced audio latency

Automatically detect and adjust for audio output device getting starved on drivers that support this

Fixed some cases where disconnecting or connecting audio devices wouldn't be detected properly

Fixed a networking bug where players may not have heard the courier entering the shop sound

Performance

Removed a number of hitches and added general performance improvments

Updated automatic video configuration to recognize several newer GPUs

Reduced CPU usage of client

Reduced GPU usage of client

Reduced start up load time

Improved thread scheduling

Fixed a bug where the asset browser would incorrectly re-render asset thumbnails that were not visible

Pathfinding for many units is now faster

Added a PathfindingSearchDepthScale key to units.txt that may be set to a value between 0 and 1 to make pathfinding less accurate but much faster for that unit, to allow for larger unit counts.

Misc

Features

New client-side game events: 'dota_player_update_assigned_hero' and 'dota_player_hero_selection_dirty'

Dota buildings now have a 'particle_tint_color' key - if set they will set their ambient and destruction FX CP 15 & 16 (dota standard) to that color

Allow tinting of heroes in custom games

Small improvements to allow customizing the end-game cinematic camera: Dota 2 Workshop Tools/Dota Camera

Added new event "dota_npc_goal_reached" which allows scripts to perform actions when an npc reaches a specific goal entity on a path.

Added new event called "dota_player_begin_cast" that happens when an ability is initiated -- this event happens early in the cast so even if the unit cancels the cast or gets stunned before the ability is successfully cast, the event will have already triggered. Use "dota_non_player_begin_cast" for non-players.

Fixes

Calling SetOrigin no longer cancels teleports on Dota NPCs

Fixed creeps having the equivalent of 1 intelligence mana regen by default

Added diagnostic spew to see if we can figure out why players sometimes can't buy items in custom games

Fixed bug where dota_create_unit didn't work for team custom8

Fixed bug where disconnected player would return to the wrong fountain, made fountain/fort/shop tracking multiteam friendly

Custom team assignments that happen when a player is disconnected will still work

Fix issue with models where the presence of a skin override would cause materialoverride to disappear after a frame - now material overrides always trump skin override

Brewmaster Ult Crash Fix

Fix to Hammer I/O widget sorting delays alphabetically rather than numerically. Other tables that want this can use the new CQTableWidgetItemSortNumeric helper to get the same effect.

Fixed problem with data-driven units not being spawned as the appropriate subclass:

Sometimes the map-specified classname is more precise (ie. corresponds with a more-derived class) than the npc_units.txt class, and sometimes the opposite is the case. Change behavior of AppendNPCKeyValues() to pick the most-derived classname, rather than always deferring to any classname that comes from the map. In vanilla Dota the npc_units.txt file is less precise than the map, thus we want the map’s npc_dota_barracks to trump the txt’s npc_dota_building:

[ npc_units.txt ] "npc_dota_goodguys_range_rax_top" { "BaseClass" "npc_dota_building" [ dota.vmap ] Entity 4167 (npc_dota_barracks '[PR#]bad_rax_melee_top'): { 0xC61B1C62:classname = "npc_dota_barracks"

But in addons, data-driven units are the opposite – the txt’s npc_dota_creature is more-derived than npc_dota_base:

[ npc_units_custom.txt ] "npc_dota_xp_granter" { "BaseClass" "npc_dota_creature" [ addon.vmap ] Entity 11 (npc_dota_base '<no targetname>'): { 0xC61B1C62:classname = "npc_dota_base" 0x155A6AA7:MapUnitName = "npc_dota_xp_granter"