Hello, I'm ArcanePariah. Some of you may know me from the SC2Mapster IRC or from SC2Mapster as ArcaneDurandel. I've been datamining changes in Void and Storm (most changes are shared between them), so I thought I would share some of the stuff coming. Also, if you have difficulty reading this, I'm open to suggestions on changing colors/formatting so it is more readable.

Now that I’ve looked through the editor strings, I’ve gotten a better idea of the things changing in Legacy of the Void Editor

We should be getting it soon, since Void ships in 2 months.

Going to go over the various change that are coming in the trigger editor, both in terms of menus, options, and some other new built in library functions. There is also a large number of new native functions, which I’ll also list at the end, along with their hint text.

Trigger Editor Function Changes

View Trigger Usage

Currently, if one wants to see where a trigger element is used, you have to open up the Overview manager, switch to triggers, and then find the relevant element. Or you can choose to right click and select “View in Overview Manager”. This does work, however, the overview manager is slow, because it must display the usage of ALL trigger elements. This new option allows one to view just the elements you select. This way, it will be MUCH faster, and much more smooth.The view usage can also be filtered to further make it easier to sort what is using the selected elements. It will provide the type of element using the element (Variable, Action, Preset, Function, Event, etc.), how many times, is it a local use, and what library is using it, and the state of the element (Is it disabled or not).

Load/Save Extra Data

It appears we will be able to load triggers from another document into the current one. This would allow one to edit related triggers to the current document (possibly from a dependency) without having to open the other file entirely. Currently if one switches documents in the editor, it can be quite slow, since it has to load everything from that document (Triggers, Data, UI, Terrain, etc.)

Function Options

Inlining

They are adding an option to make a function inline. What this does is take actions/functions/conditions that are one action/line and instead of calling the inlined function, it simply replaces the place where a function call would occur with the function body.

For example, if we had a function called sum, that returns the sum of two numbers, it would have 2 parameters (integers for this example), and would have a single action, return param1 + param2. So the code would look like this

Here, the parameters were substituted in and the call entirely replaced. For this reason, inline functions will only work if they are one action.

This provides a performance boost to code that calls such simple functions repeatedly, like something that does conversions from one type to another.

Script prefixing option

Currently, the editor, when generating the script code from gui, automatically adds prefixes to the functions, usually to separate function names from different libraries. It also does this to associate functions with triggers vs those that are not. This option will let you remove those prefixes, so a function is named precisely what you specify.

Preset Constants and Retrieval

Currently, when you create Presets, you assign a type to them, and then use them. But if you want to use them as their actual type (Integer, Real, etc.), you have to write your own function to convert them, so they are accepted by GUI. An option is being added for Presets that will autogenerate a conversion function for that Preset.

There is also an option being added to make Preset values generate constant variables and uses those instead of literal values. Normally when you use a Preset in GUI, its literal value gets substituted in at the point of usage. WIth this option, it will use a constant variable instead, which can make the code more readable, since you will be able to see that a Preset was used at that location, instead of just another value.

Debugger

The debugger has 2 major new capabilities. First, it can now filter variables and functions. For larger projects, this is crucial to help find problematic functions or to simply find the variable you want to keep track of.

Second, you can now view and set breakpoints in all scripts that are included/running on the map. Currently, you can only do breakpoints and view the script of the map itself, and none of the ones contained in dependencies.

New Natives

Format is:

Name of Action/Event/Condition - New or Updated (some simply received updated hint text) - Hint Text

I will be organizing these so it is more apparent what functions are related to each other.

TimerGetRemaining - Updated - Returns the remaining amount of time left on the specified timer. Note that due to rounding limitations, the remaining time of an expired timer may be slightly negative rather than exactly zero. Make sure to check for less than or equal to zero to account for this.

TransmissionSendForPlayerSelect - New - Sends a transmission with sound and an optional portrait actor to the specified players from a source unit or model. Use "Last Sent Transmission" to refer to this transmission after it has begun.

ImageToString - New - Converts an image to a string value.

UnitGetChargeRegenFull - New - Returns the full charge regen time for the specified unit charge link. If Adjustment Only is true, it will only return the "bonus" amount added to (or subtracted from) the full regen time.

TriggerAddEventPlayerJoin - New - This event fires when a player joins the game. Use "Triggering Player" to get the player.

TriggerAddEventCommandError - New - Event that occurs when a player recieves a command error.

UISetTargetingOrder - New - Setting the unit group to a unit group other than "null" will enter targeting mode for the specified unit group even if they are not selected. This unit group must remain referenced until targeting is completed. Setting the order to "No Order" will end targeting mode. Setting the order as "sticky" will keep it active until canceled or another order is set.

SetDialogItemFillColor - New - Sets the fill color for a dialog item.

EventUnitAbilityOtherUnit - New - Returns the "other unit" when an ability is used. For inventory abilities, this is the item used. For transports, it's the unit being unloaded.

cai_wave_createdWave - Updated - Returns the wave data associated with the last attack wave created for a specific wave definition within an AI personality defined in the AI module. To get the last wave for the personality regardless of wave definition, use Last Created Wave for Personality.

SetDialogItemPlayerId - New - Sets the target playerId for a dialog item. Only used by Hero Cutscene dialog items.

CatalogFieldValueGetFlagsAsInt - New - Returns the value of a CFlags or CFlagArray field for an entry as an integer so bitwise math can be done on it. Use catalog lookup functions to retrieve a data value or other information from the game data. To find the name of a field path, open the data editor and turn on View Raw Data.

UnitHasBehavior2 - New/Updated (This is a replacement function) - Returns true if the specified unit has the specified behavior.

DialogSetPositionRelativeToUnitWithAnchor - New - Moves a dialog to the specified anchor, relative to the specified attachment point of the specified unit, with the specified offsets.

ConversationDataLineSetPlayers - New - Set the conversation line to only play for the given players. This overrides the players associated with the entire conversation, but cannot add players that are not viewing the conversation itself.

TriggerEventParamName - New - Returns the name of a generic event parameter which can be used within the local data table to store or access event parameters. Store parameters in the table before calling Send Generic Event, and access them in response to the event.

AttachModelToActor2 - Updated/New (This is a replacement function) - Creates a generic actor with the specified model attached to an actor at the specified attach point. Use "Last Created Actor" to get the attached model's actor.

VisResetFoWAlpha - New - Reset a player's Fog of War transparency level to the default value.

EventUnitHealAmount - New - Returns the triggering heal amount.

InShrub - New - Returns whether a point is in a shrub.

AnimLengthQueryByName - New - Starts a query for the animation length and animation time remaining of the specific animation name for the given actor. Note that the animation length and remaining time may vary from player to player due to different game states or localities. This function will query the maximum length and maximum remaining time of all players when there are different values. Note that you may only do 512 animation length queries maximum in a single game. Use the "Last Animation Query" function to get a handle to this query which can be used to get the information retrieved after the query is complete.

GameAddChargeRegenFull - New - Adds to the amount of time to regenerate the specified global charge link.

PlayerCommander - New - Returns the commander of the player.

PlayerSetCommander - New - Sets the commander of the specified player.

UnitBehaviorAddChargeRegenRemaining - New - Adds to the amount of time remaining it takes to regenerate the specified behavior charge link.

EventUnitVictimUnit - New - Returns the victim unit of the event. Used in response to "Unit Gains Experience".

ConvertPresetToIdentifier - New - Converts a preset value to a string containing the identifier of the value. The preset must enable the Generate Identifier Conversion Function option for this to work.

CameraFollowUnitGroupGet - New - Follows a unit group with the camera.

TransmissionSendForPlayer - New - Sends a transmission with sound and an optional portrait actor to the specified players from a source unit or model. Use "Last Sent Transmission" to refer to this transmission after it has begun.

DialogGetRenderPriority - New - Returns the render priority for the specified dialog.

DialogSetRenderPriority - New - Sets the render priority for the specified dialog. Dialogs with higher render priorties are rendered on top of dialogs with lower render priorities.

UIHotKeyString - New - Returns the localized text for a given hot key, such as "Alt + G"

SoundPlayAtPointForPlayer - New - Plays a sound at a point for the specified player group. Use the "Last Played Sound" function to refer to this sound.

TriggerAddEventUnitHealed - New - This event fires when a unit is healed through effects. Use "Healing Unit" to get the unit casting the heal. Use "Healing Player" to get the owner of the unit that is dealing damage. Use "Triggering Heal Given" to get the amount healed. Use "Triggering Heal Vital Type" to get the vital type that was healed. Use "Triggering Player" to get the owner of the unit that is healed. Use "Triggering Unit" to get the unit that is healed.

EventCommandErrorValue - New - Returns the triggering command error.

ConvertPointToString - New - Converts a point value to a string value.

UnitAddChargeRegenRemaining - New - Adds to the amount of time remaining to regenerate the specified unit charge link.

AnimLengthQueryByProps - New - Starts a query for the animation length of the specific animation props for the given actor. Note that the animation length time may vary from player to player due to different game states or localities. This function will query the maximum length time of all players when there are different values. Note that you may only do 512 animation length queries maximum in a single game. Use the "Last Animation Query" function to get a handle to this query which can be used to get the information retrieved after the query is complete.

UnitAbilityAddChargeRegenRemaining - New - Adds to the current amount of time remaining to regenerate the specified ability charge link.

MidPoint - New - Returns the point half-way between the two given points..

EventCommandErrorAbilCmd - New - Returns the ability command that was being issued when the command error was hit.

AISetBullyRebuildDelay - New - Sets the delay time before the AI starts trying to replace missing bullies for a player.

ObjectiveSetPriority - New - Determines which order objectives will display in. Larger priorities will appear higher in the list. The default priority for an objective is -1.

SetDialogItemBorderColor - New - Sets the border color for a dialog item.

EffectHistoryGetTime - New - Returns the game time (in seconds) when the effect that was logged in the Effect History at the specified Index occurred.

UnitBehaviorGetChargeRegenFull - New - Returns the full charge regen time for the specified ability charge link. If Adjustment Only is true, it will only return the "bonus" amount added to (or subtracted from) the full regen time.

TextExpressionAssemble - New - Evalutes the given text expression with all token values in place. Token values may be set using 'Set Text Expression Token'.

UnitOrderIsAcquired - New - Returns true if the unit's indexed order has been acquired rather than issued explicitly.

UnitGetDamageDealtTime - New - Returns time for how long it's been since the unit has dealt damage.

EffectHistoryGetEffect - New - If the Effect parameter is set to Root, this will return the effect that was at the root of the effect tree for the effect that was logged in the Effect History at the specified Index. If the Effect parameter is set to Current, then this will return the effect that was logged in the Effect History at the specified Index.

PingCreateWithPlayerId - New - Creates a minimap ping using the facing angle of a point. Use "Last Created Ping" to refer to the created ping.

ConversationDataGetSpeaker - New - Returns the speaker character associated with the given conversation line.

DialogControlSendAnimationEvent - New - Sends an animation event to a dialog item. Animations are defined in the layout of a dialog item. All animations that are listening to this event on this dialog item will trigger their defined action.

GameMapPath - New - Returns the path of the map currently being played.

PlayerCommanderLevel - New - Returns the commander level of the player.

PointInterpolate - New - Returns a point along the line defined by the two given points. The position along the line is determined by the given fraction. 0.0 means the source point, 1.0 means the target point, and 0.5 means half-way between the two. Values outside the 0.0 to 1.0 range result in valid extrapolations along the line beyond the given points.

PathSetMinimumTravelDistance - New - Travel distance measures the accumulated separation between each turn on a path.

CatalogFieldValueModify - New - Modifies the value of a field for an entry. To find the name of a field path, open the data editor and turn on View Raw Data. For example, if you wanted to set the unit for the first index of a train ability, your field path string would be "InfoArray[0].Unit".

UnitBehaviorDurationTotal - New - Gets a behavior duration on a unit.

RegisterEvents - New - When used in a custom event definition, this associates one or more native events with the custom event. When used in a trigger, this dynamically registers new events with the trigger. Note that registering the same event with a trigger multiple times may cause it to execute multiple times in response to the event, so that should generally be avoided.

ObjectiveSetFirst - New - Places the objective at the end of the list, causing it to display below all other existing objectives. Objectives created later will still be added after this objective.

TriggerDebugSetTypeFilter - New - Enable or disable various filters for debug messages. By default all filters are off and must be enabled if you want filtering to occur.

ObjectiveSetLast - New - Places the objective at the start of the list, causing it to display above all other objectives.

EventUnitHealLaunchUnit - New - Returns the Casting unit.

UnitModifyCooldown - New - Modifies current cooldown time for the specified unit cooldown link.

UnitGetDamageTakenTime - New - Returns time for how long it's been since the unit has taken damage.

PathGetMinimumTravelDistance - New - Travel distance measures the accumulated separation between each turn on a path.

TriggerCurrentTriggerThreadSetFlags - New - This is only used to set flags on the current galaxy thread so that the internal execution can know what type of thread is being executed.

PingCreateFromData - New - Creates a minimap ping using the facing angle of a point. Use "Last Created Ping" to refer to the created ping.

EventUnitItemUsed - New - Returns the item used in the event. Used in response to "Unit Gains Experience".

EffectHistoryGetType - New - Returns the type of effect that was logged in the Effect History at the specified Index. The type for the effect is set in the effect data in the Caster History field.

PlayerSetRace - New - Sets the race of the specified player.

SoundPlayOnUnitForPlayer - New - Plays a sound at a unit for the specified player group. Use the "Last Played Sound" function to refer to this sound.

EventPingOption - New - Returns an index into the specific ping option chosen in the ping panel.

SoundPlayForPlayer - New - Plays a sound for the specified player group. Use the "Last Played Sound" function to refer to this sound.

UnitConjoinedGroup - New - Returns the conjoined group of a unit given a conjoined behavior

AnimWait - New - Waits until an animation is a specified amount of seconds from the offset type. Note that the animations and animation times may vary from player to player due to different game states or localities so this waits for all players to report that they have reached the specified point.

PlayerGetChargeRegenFull - New - Returns the charge regen time for the specified player charge link. If Adjustment Only is true, it will only return the "bonus" amount added to (or subtracted from) the full regen time.

UnitAbilityAddChargeRegenFull - New - Adds to the amount of time it takes to regenerate the specified ability charge link.

UnitXPGetCurrentLevel - New - Returns the current level of a unit

UnitPathableToUnit - New - This returns whether or not the unit can path to the specified unit.

UnitAbilitySpendExplicit - New - Activates the specified cooldowns on the specified ability on the specified unit. In most cases, this will cause the ability to act as if it had just been used.

TriggerAddEventUnitDamageAbsorbed - New - This event fires when a unit absorbs damage due to a behavior damage response. Use "Triggering Unit" to get the unit that absorbed damage. Use "Triggering Behavior" to get the behavior that absorbed damage on the unit. Use "Triggering Damage Absorbed" to get the amount of damage absorbed. Use "Damaging Unit" and "Damaging Player" to get the unit and player that caused the damage.

ConvertStringToBoolean - New - Converts a string value to a boolean value.

MinimapPingPossibleEnemyStartLocations - New - Pings the minimap at each possible enemy spawn location of the local player. This ping cannot be modified after it is created. Use a "Create Ping" action to create a more customizable ping that can be modified after creation.

TriggerAddEventHotkeyPressed - New - Only register for this event when you absolutely need it, as it will generate network traffic from all players for every hotkey they press. This event fires when a player presses the specified hotkey. Use "HotKey Pressed" to get the hotkey that was pressed.<n/>WARNING: If code handles the hotkey press (for example, Army Select is pressed and code responds by selecting all army units), this event WILL NOT fire!

EventUnitDamageVitalsLeeched - New - Returns the vitals leeched by the damaging unit.

SetDialogItemStateIndex - New - Sets a Dialog Item's State Index. Currently supported for type Image.

ArithmeticInt2 - New - Returns the bitwise operator of the specified integer values.

UnitOrderGetProgress - New - Get the progress of the current order for the given unit.

TextTagSetGravity - New - Sets the acceleration on the Z axis at which a text tag will adjust its velocity.

TransmissionSourceSetBypassMessageLog - New - If the bypass message log flag is set to true then the text from this transmission will not be added to the message log.

PingSetObserver - New - When true ping will display for observers regardless of whether they are viewing the game through everyone vision, or player vision.

UnitXPGetXPForLevel - New - Returns the total xp required for a specific level

AnimLengthQueryWait - New - Waits until all queries sent with "Query Animation Length" functions have been received for all players.

ConversationDataLineHideForObservers - New - When hidden, the line will never be played for observers. When showing, the line will be played as long as it is visible to any player being observed.

UnitXPGetNumLevels - New - Returns the number of levels available for a unit

PlayerSetDeathTimer - New - Sets the death timer for the specified player.

EffectHistoryGetWeapon - New - Returns the weapon that originated the effect that was logged in the Effect History at the specified Index. If the effect came from an ability rather than a weapon, this will return No Game Link.

VisFillArea - New - Fill the specified region for the specified player with visibility of fogged, masked, hidden or unexplored.

UnitXPAddXP - New - Adds XP to the current unit

SetDialogItemSubmenu - New - Sets the submenu for a dialog item. Only used by Command Panel dialog items.

UnitWeaponSetPeriodRemaining - New - Set the remaining cooldown to 0 to let the weapon fire as soon as possible.

ScreenLabelDialogItem - New - Returns the dialog item that is the specified screen label. Use "Display Screen Label" to create screen labels.

TextExpressionSetToken - New - Assigns a text value to an arbitrary token for use in a text expression. Use the 'Main' preset value as the token to set the expression text itself. Use the function 'Text Expression' to evaluate the final text with all token values in place.

AnimLengthRemainingSync - New - Returns the animation time remaining previously queried. Pass this function the handle returned by the "Last Animation Query" functions to get the value, but make sure that you call Wait for Animation first to ensure that the animation query is finished. This function is only valid with a handle created by "Query Animation Length By Name".

UnitBehaviorAddChargeRegenFull - New - Adds to the amount of time it takes to regenerate the specified ability charge link.

TriggerDebugOutputEnable - New - Enable or disable debug messages

SoundPlaySceneForPlayer - New - Plays a sound for the specified players, and plays the specified animation on the specified units. The animation on the units will be sync'd up with the sound.

UnitHasBehavior - Updated - Returns true if the specified unit has the specified behavior. (Deprecated: Actually just returns true if the stack count for this behavior is > 0)

SetDialogItemUnitGroup - New - Sets the unit group for a dialog item. Only used by Command Panel dialog items.

UISetGameMenuItemShortcut - New - Sets the shortcut keyboard key of a specified menu item in the game menu. Allows customization of the F10 menu.

PlayerSetBounds - New - This does not affect pathing. Passing in a null region will reset to the global playable bounds. The provided region will be clamped within the global playable bounds.

KickFromGame - New - Kicks every player in the specified player group from the game

AnimLengthSync - New - Returns the animation length previously queried. Pass this function the handle returned by the "Last Animation Query" to get the value, but make sure that you call Wait for Animation Length Queries first to ensure that the animation query is finished.

EventUnitEffectUsed - New - Returns the effect used. Used in response to "Unit Gains Experience".

SetDialogItemtoUseAspectUncorrection - New - By default, the offset X and offset Y values of a dialog item's position will be corrected for the aspect ratio of the window showing the game. This function is to prevent that conversion from happening. It's useful for cases where you want to feed in design coordinates and not have them aspect corrected.

GameGetChargeRegenFull - New - Returns the charge regen time for the specified global charge link. If Adjustment Only is true, it will only return the "bonus" amount added to (or subtracted from) the full regen time.

UnitInRangeAndAbleToAttackTarget - New - Returns true if the specified unit is in range and currently able to attack the given target. This function does not factor in is weapon cooldowns.

DisplayScreenLabel - New - Creates a screen image, with an identifier chosen by the ScreenImageID parameter, at the specified anchor, with the specified size and offset.

PlayerAddChargeRegenFull - New - Adds to the full amount of time it takes to regenerate the specified player charge link.

TransmissionPlayerHasActiveTransmission - New - Returns whether any transmissions are active for the specified player.

PointFacingAngle - New - Returns a point with the position of the specified point, and the facing of the specified angle.

EventUnitHealLaunchPlayer - New - Returns the healing player.

DialogControlRequestFocus - New - Currently supported for Dialog Items of type EditBox

TransmissionClearGroup - New - Immediately stops transmissions that are currently playing / being sent for a player group. Any triggers that are waiting for such transmissions to finish will resume execution.

CatalogReferenceModify - New - Modifies the value of a field for an entry. To find the name of a field path, open the data editor and turn on View Raw Data. For example, if you wanted to set the unit for the first index of a train ability, your field path string would be "InfoArray[0].Unit".

TriggerAddEventPlayerEffectUsedFromScope - New - This event fires when an effect from the specified scope is used by the specified player.

ConversationDataLineResetPlayers - New - Reset the conversation line to play for the default players associated with the entire conversation.

UnitXPSetCurrentLevel - New - Sets the current level of a unit

StringCompare - New - Returns 0 if the two strings are the same. Positive value means first character that doesn't match is greater in String1. Negative means it's greater in String2.

cai_getLastWave - New - Returns the wave data associated with the last attack wave created for an AI personality defined in the AI module. This may correspond to any wave definition. To get the last wave for a specific wave definition, use Attack Wave Last Created Wave.

ArithmeticIntMult2 - New - Returns the bitwise operation of the specified integer values in multiple instances.

PlayerSetCommanderLevel - New - Sets the commander level of the specified player.

GameAddChargeRegenRemaining - New - Adds to the amount of time remaining to regenerate the specified global charge link.

UISetMiniMapBounds - New - Sets the Minimap Bounds to the specified Region.

EffectHistoryGetAbil - New - Returns the ability that originated the effect that was logged in the Effect History at the specified Index. If the effect came from a weapon rather than an ability, this will return No Game Link.

UnitAbilityGetChargeRegenFull - New - Returns the full charge regen time for the specified ability charge link. If Adjustment Only is true, it will only return the "bonus" amount added to (or subtracted from) the full regen time.

AttachModelToUnitInheritVisibility - New - Creates a generic actor with the specified model attached to a unit at the specified attach point. Use "Last Created Actor" to get the actor. If the unit is hidden, the attached model will also be hidden.

CameraForceFollowUnitGroup - New - Toggles whether the camera is forced to follow the active follow unit group. If it is not forced to follow then it will rely on the player's local follow state.

EventItemAbilityOrUnitAbility - New - If the ability was triggered by an item, it returns the items ability. Otherwise it returns the triggering ability.

PlayerAddChargeRegenRemaining - New - Adds to the amount of time remaining to regenerate the specified player charge link.

EffectHistoryCount - New - Returns the number of entries in the specified Effect History. Use Effect History Of Unit to get an Effect History.

UnitEffectHistory - New - Returns an Effect History object that can be used to inspect the history of effects for a unit. In order for a unit to register effects to its history, the unit must specify an Effect History Limit value, and any effects you want to track must specify a Caster History value. The Caster History value specifies the category under which you want to track the effect. You can use Effect History Entry Type to query the category for an Effect History entry. A max count of 0 (the default) will get all available entries.

UnitPathableToPoint - New - This returns whether or not the unit can path to the specified point.

DataConversationLinesWithTag - New - Tags may be defined for lines or groups within the conversation data in the Data module.

SetDialogItemAnimationIndex - New - This controls the current animation index for the dialog item. Supported for Dialog Items of type Image

HelpPanelAddMessage - New - Creates a new entry to the message log panel. If speaker text and subtitle text are left blank they will be filled in with values from the sound link.

EventUnitDamageAttemptedVitals - New - Returns the triggering damage amount attempted to vitals. This is the damage done before clamping against the amount of life the target unit has. Modified by damage responses.

UnitGetName - New - Returns the name of a specific unit. This function should be preferred if you wish to account for behavior-based name overrides rather than displaying the name of the unit type.

ArcanePariah wrote:Unknown at this time. The Void beta is getting a patch soon, so we may be able to tell then. I'll update the original with a slightly more organized setup in the next day or so.

I see.

In addition, I would be curious if they added anything regarding the ability to store bank data on battle.net's servers instead of locally.

While there is the manipulation issue, there is also the problem where you can only upload at like 10 kilobytes/second which is a deal breaker with very large banks. If they are stored on b.net, hopefully it will make the download much much faster ... or actually increase the upload limit.

I'm most interested in any new Data options. Blizz said the engine would be patched to 3.0 soon, and planned maintenance on the 6th suggests that's when it will be released, or at least open for pre-download of files. I think they said old replays won't work after that. We have to watch out for maps broken by this, which will suck for ones that aren't updated anymore.

There is simply too much to post at this time. There are a number of entire new data types, some to support Storm, but many are just new (Sound Exclusivity, Ping)

There is also indications of more support for singleplayer content. THey are adding a new category to the Arcade for Single Player, and there is a new data type for Campaigns (literally is called Campaign). It currently doesn't have much in it, just campaign bank file fields that were formerly in Game Data.

The biggest change in data is the introduction of data wizards. The short version is that one will be able to design wizards that walk you through creating a data object. THese wizards can be exported/imported and modified. They get their own view (Alongside Table/Detail/XML). So it appears one can create wizards to walk others through creating data objects. Furthermore, it appears you can instruct a wizard to run another wizard after completion, so they can be chained together, simplifying data creation considerably.

In terms of new data fields... it is simply gigantic, quite possibly hundreds. Some things include

* Kinetics: Apply these to alter the movement of a unit

* Dynamic Armor attributes via behaviors

* Damage responses can be priortized (so one can made to go before another), and they also get validators

* Modify unit effects can modify the facing direction of a unit.

* Ton of new actors and site ops. Site Ops to cause orbiting, and orbiting site actor, tether site op, cursor site op.

I could keep going and going. They added documentation for all of this, all the new data fields have hints explaining what they do. Listing all the data fields would dwarf my original post on triggers.

Also, another key feature of data is the introduction of Data Spaces. As you well know, data for each data type (Effects, Abilities, Behaviors, etc.) is kept in its own XML files, and that you can only filter either by name or by dependency. With data spaces, you can create standalone data xml files that incorporate ALL types of data entries into that single xml file. You can then filter by them.

Blizzard is using this to group data relevant to each hero in Storm. Attached is two examples of this. There will be a fuction to move data entries into a data space. Not only does this improve data work efficiency, it ALSO makes data highly portable, since to export/move a relevant thing to another map, now only requires exporting adn importing a single XML files (for example, assuming you have the Storm asset dependencies, it would be trivial for one to add any storm hero to a map)

Data Wizards? Damn, I would have swore that Blizzard would never even try to do it. I am beyond surprised that it was done and not just left under the rug. The Data porting would also make it easier to port changes I did in some of my maps into current ones.

In a patch 3.0 video, I also saw that they made open games default rather than putting into the popularity screen. Although I don't know the subtle details that could make or break it.

At least on paper, Blizzard sure tried to make it right for LotV. They did more efforts than I mentally gambled on.

I would need to conduct a test to see if they ever did anything with the AI natives that caused so many performance problems in Apex. I might do that when they patch and report my results, if updating my project won't take much effort. Mostly concerned about potential compatibility issues with those galaxy files, but seeing as we simply strip out most of the AI's softcoded functions, it may not be too bad.

A simple test would also be my straightforward option - an FFA with computers on Exotic Garden. That proves to drop me to 0fps by the time the first attacks start moving out.

I probably should create a new thread for this, but Data Wizards are here and indeed quite powerful. You can use them in 3 ways

1) Create data entries, with customized workflows and inputs. The UI you create yourself, and then map the inputs onto the fields

2) Modify existing data. Basically you can setup a wizard to be a UI customization, where you select a data entry, and select Load Wizard, and it runs the wizard, just with the loaded data. This can be used for modification of an existing data or to create data based off an existing object.

3) View. You can build wizards solely to customize the UI, and thus strip out unnecessary fields, and customize the input as you wish.

Attached is my current working Wizards. Multiple wizards can be defined in a single wizard file. Only have 2 at the moment. The first lets you select a behavior and then creates an Ability with a name you provide, as an Effect Target, and creates the apply behavior effect, and links them all together.

Second one lets you select from a drop down, a number of common effects and select how many levels of it you want as well as naming it. Right now, I only have additional inputs supported for damage effects.

Kinetics are not broken, just incomplete. The data can be manually entered in XML if needed. Each kinetic does what it says on the tin.

Follow: Units are forced to follow the movement of another unit (in relation to the apply kinetic effect).

Translate: Directly moves the unit in the direction indicated

Rotate: Rotates the unit about a point.

What you may be seeing is that because they are incomplete, the default values are VERY bad.

The way Rotate and Translate kinetics work is a function of the Rotation/Translation values OVER the duration. So if your duration is 20 minutes, the translation/rotation will occur over 20 minutes.

The cycles field controls how many times the kinetic repeats itself. So if you set a translate kinetic to a duration of say, 5 seconds, with a movement of Y=5, with a cycle count of 10, you would get a unit move directly north at 1 movement speed for 5 seconds, and after 5 seconds , repeat again, for a total duration of 50 seconds. Same works with rotate.

Now, kinetics are interesting, the directly apply the movement, but this does NOT make the unit lose control, it can still move, and fight the movement imposed on it. Also, all kinetics have validators on them, so you can disable/enable them as necessary. One example of this is that one can quite realistically give tidal forces for a naval combat situation (randomly applied translation kinetics).

Also kinetics can be applied simultaneously (KineticSets) or sequentially (KineticSequences).

Kinetics CAN stack. I applied 4 rotates at once and..... woooah... looks like a techno rave on screen.

Bah, spoke too soon about the Location Arc validator. You can make it work if you want to check if something is, for example, in front of or behind a unit, which may not have worked before, but it still goes nuts if you try to pass it a point and check the angle around that.