Beta Release Notes
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 treesGridNav:DestroyTreesAroundPoint()
- Destroy trees around a pointGridNav:GetAllTreesAroundPoint()
- Get all the trees around a pointSetPrimaryAttribute()
- Set Primary Attribute on a heroResolveNPCPositions()
- Resolve potential collisions between NPCs moved by codeEmitSoundOnLocationWithCaster()
- Emit a sound on a location related to a specific NPCMinimapEvent()
- Create Minimap Events, such as pings and teleportsGameMode:SetCustomGameForceHero()
- Force hero selectionIsClone()
- Check whether a hero is a Meepo cloneSendOverheadEventMessage()
- Show overhead XP/Gold noticesUpgradeToFlyingCourier()
- 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"
- Fixed a crash when spawning a model that wasn't in the player's fog of war
- Several shutdown crash fixes
- Fixing glows to match s1 more closely
- r_drawworld works now
- Fixed shadow acne bugs on morphing character portraits
- Projected decal orientation fixes (these were busted in alpha)
- Status FX fixes (many busted in alpha)
- Tiny/NightStalker models now properly change for level-up and day-night cycle change
- Fixed rainbow colored skins on certain heroes
- Fixed attack projectile timing on various heroes
- Fixed "skin" changes sometimes causing your model not to render
- Hero Inspector view now shows proper LODs
- Team Showcase view now shows proper LODs
- Fixed certain hero parts being over-glowy
- Fixed "too-bright" fish in the river
- Fixed crashes when equiping custom wards
- Fixed various polygons all over the screen bugs (polys all over the screen when someone used dust)
- Fixed large perf hitches when spawning illusions
- Fixed stuttering caused by certain types of particle systems spew "is trying to get CP object 8 but the operator read limit is 2"
- Fixed a bug with particle systems not showing up in the water
- Fixed a crash when models were recompiled and a map was loaded
- Colorblind mode fixes
- Fixed bugs with lighting effects having big square holes in them
- Fixed issues with "black" textures sticking around after loading a map
- Fixed the issue of buying a courier and it not showing up until other heroes have spawned
- Fixed occasional crash in the lua 'ReplaceHeroWith' function.
- Fixed several path name errors on particle effects that caused some effects to be missing
- Shops.txt will now load from an addon.
- The purchase in the secret shop 'S' icon is suppressed when your addon uses universal shop mode