• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

[Feedback] Request Features for JASS and the World Editor

Status
Not open for further replies.

Wrda

Spell Reviewer
Level 25
Joined
Nov 18, 2012
Messages
1,864
@Darkfang
Making things easier doesn't justify "Let's request stuff that will entirely hide features that already do the same". Also the reason why triggering everything is much better it's because you have the absolute control in what you want do to. Imagine this scenario: A guy asks for 2 additional options for holy light such as "deal damage to enemy undead units and heal nearby allies over time" and "if the target dies with the buff then summons an angel to fight for you giving all nearby ally units 1 armor bonus per second". That's some level of complexity, but then, it is the guy's idea of an ability he wants, something very specific. So if there were other people that would also want more options for the same ability, by the time we got them it would be a lot of fields, a complete mess. Easier to do? Yes, but very personal request and not something objective that opens major opportunities to manipulate every aspect of something. Mostly, things that are impossible to do, or are a complete hassle or are prompt to undesired issues like spike lags. E.g. A missile system, for high demanding maps, creating your own or even using the hive's might generate bad performance if there's quite a lot of missiles (say 300).
Everything takes time, not just triggering.
>Having to trigger everything is a bumper, besides the fact that some trigger interactions don't stack well with the system itself, adding buffers with hidden abilities causes spellbook to close and minor lag, they don't interact well with spell shields and may lead to bugs, besides the fact that seing a bug, and not knowing from where it damn comes from a handle of a thousand of triggers that I've made for my maps is frustrating
Just like everything, the map doesn't read your mind. It looks like what you're describing as bad triggering, which can obviously be improved like any one can over time. I don't know what "trigger interactions" don't work well with a "system" as you call it, but might as well post them in the bug and issues thread.

@Devalut
>Not for a target going being ordered to walk in the immediate direction of the unit you turned collision off for, the unit will still attempt to walk around it.
Well, that looks more like a bug.
  • Unit - Treat (Triggering Unit) as Ally to (Player 1) /// This includes units owned by Player in question for extra tom-foolery
  • Unit - Treat (Triggering Unit) as Alliance (Non-Aggressive) to (Player 1)
  • Unit - Treat (Triggering Unit) as Neutral to (Player 1)
  • Unit - Treat (Triggering Unit) as Enemy to (Player 1)
I'm still not buying this if the affected unit is owned by same player. How would that exactly work?
>Non-sense, you are just sense-less.
  • Unit - Defend (Center of Region(Playable Map Area) /// " " " " "
What in the world of the goddamn gods would this even do, Mr. Non-sense King? Must be a genious idea telling no actual units from no player to just defend a point of the map.

devalut come on, this is a discussion topic, you don't need to be dramatic or get offended for no reason when someone criticizes you. I was asking legitimate questions because I didn't really fully understand those points and some look unnecessary.
 
Level 24
Joined
Feb 9, 2009
Messages
1,783
@Wrda
>How would that exactly work?
Did you watch those starcraft 2 trailers, remember the Changeling? Here's the trailer if you haven't seen it, the trigger would work very much like that save for the Color/Morph change.

>What in the world of the goddamn gods would this even do, Mr. Non-sense King?
Like I said before in my previous post, I didn't delve to deeply in this one.
If I had to sum it up, I was trying to convey a quick A.I. prompt that deliver a simple command that would normally be covered by six or seven seperate sets of triggers, if one line can reduce 10 triggers I'll take it without question!

>Devalut come on, this is a discussion topic, you don't need to be dramatic or get offended for no reason when someone criticizes you. I was asking legitimate questions because I didn't really fully understand those points and some look unnecessary.
Offended, far from it, in fact I'm pleased as punch; and I have this silly grin spread across my face from the moment after you posted today, specially when I spent a thousand hours in mspaint drawing your likeness onto an american cartoon character. Did you not like it? I can take if down if you don't like it...
 
@Darkfang
Making things easier doesn't justify "Let's request stuff that will entirely hide features that already do the same". Also the reason why triggering everything is much better it's because you have the absolute control in what you want do to. Imagine this scenario: A guy asks for 2 additional options for holy light such as "deal damage to enemy undead units and heal nearby allies over time" and "if the target dies with the buff then summons an angel to fight for you giving all nearby ally units 1 armor bonus per second". That's some level of complexity, but then, it is the guy's idea of an ability he wants, something very specific. So if there were other people that would also want more options for the same ability, by the time we got them it would be a lot of fields, a complete mess. Easier to do? Yes, but very personal request and not something objective that opens major opportunities to manipulate every aspect of something. Mostly, things that are impossible to do, or are a complete hassle or are prompt to undesired issues like spike lags. E.g. A missile system, for high demanding maps, creating your own or even using the hive's might generate bad performance if there's quite a lot of missiles (say 300).
Everything takes time, not just triggering.
>Having to trigger everything is a bumper, besides the fact that some trigger interactions don't stack well with the system itself, adding buffers with hidden abilities causes spellbook to close and minor lag, they don't interact well with spell shields and may lead to bugs, besides the fact that seing a bug, and not knowing from where it damn comes from a handle of a thousand of triggers that I've made for my maps is frustrating
Just like everything, the map doesn't read your mind. It looks like what you're describing as bad triggering, which can obviously be improved like any one can over time. I don't know what "trigger interactions" don't work well with a "system" as you call it, but might as well post them in the bug and issues thread.

@Devalut
>Not for a target going being ordered to walk in the immediate direction of the unit you turned collision off for, the unit will still attempt to walk around it.
Well, that looks more like a bug.

I'm still not buying this if the affected unit is owned by same player. How would that exactly work?
>Non-sense, you are just sense-less.

What in the world of the goddamn gods would this even do, Mr. Non-sense King? Must be a genious idea telling no actual units from no player to just defend a point of the map.

devalut come on, this is a discussion topic, you don't need to be dramatic or get offended for no reason when someone criticizes you. I was asking legitimate questions because I didn't really fully understand those points and some look unnecessary.

Oh sorry, thus spoke the super experienced map maker and trigger maker, sorry that I do not care about total control when we can have both total control and making the game more accessible, specially NOW that there will be newcomers with reforged, making things easier for mapmakers is a must, so no, I'm not being silly by requesting something that will both improve gameplay, performance AND mapmaking.
 

deepstrasz

Map Reviewer
Level 68
Joined
Jun 4, 2009
Messages
18,706
Please make the editor exclude importing files that would otherwise crash the editor like:
  • models with one wrong texture path
  • corrupted trigger comments and triggers in general
The point is that these might crash the editor after saving the map and then opening it again.
 
Last edited:

Wrda

Spell Reviewer
Level 25
Joined
Nov 18, 2012
Messages
1,864
Possibly add garbage collection to (v)jass with support in GUI so that unaware map makers can proceed without having spikes or lags, and so that other other people can stop worrying about leaks in general.
Possibly make lua acknowledge other types (unit, lightning, timer, location, group) etc, and add garbage collection for the objects lua still doesn't clean yet (timer, location, group).
 

deepstrasz

Map Reviewer
Level 68
Joined
Jun 4, 2009
Messages
18,706
Means to search within triggers and their actions (general search, not one for each window/shelf).
For instance if I write Crypt Fiend (Uber) and the unit is used in a an action like create 1 Crypt Fiend (Uber) or as the name of a trigger, I want the search to get me there directly.
 
Means to search within triggers and their actions (general search, not one for each window/shelf).
For instance if I write Crypt Fiend (Uber) and the unit is used in a an action like create 1 Crypt Fiend (Uber) or as the name of a trigger, I want the search to get me there directly.

Thats a good one, specially to find bugs which can some times be hard
 

deepstrasz

Map Reviewer
Level 68
Joined
Jun 4, 2009
Messages
18,706
A way to replace existing imported files when mass importing the same file names. This helps against issues where a newer editor version might zero (file size=0KB) some imports out.
Currently if you import a file with the exact same name, it will be added as a new one.
 
Level 24
Joined
Feb 9, 2009
Messages
1,783
De/Buff for Spell Damage Individual units
Item Bonus Spell %/-/+ For Items

Reminder - Gameplay constants do not cover multiple units and multiple situations and therefore is not, and currently will not alleviate my suggestion.
Any attempt suggest fashioning the current abilities -regarding magic damage- (Anti-Magic / Magic Immunity / Magic Resistance(Runed Bracer)) into some rube goldberg monstrosity is ludicrous. You know who you are~
 

Wrda

Spell Reviewer
Level 25
Joined
Nov 18, 2012
Messages
1,864
Special Effects attached to special effects. with an offset parameter too.
Also all unit and doodad enumerations (pick every unit/doodad) don't include the collision size and pathing map of units/buildings/doodads. So we need those functions to work with that, or make additional ones with the same purpose.
 

deepstrasz

Map Reviewer
Level 68
Joined
Jun 4, 2009
Messages
18,706
Possibility to (all related):
  • create (via triggers) and place items on/over water
  • set item (flying) height
  • choose if an item is to be targeted as being on water, in air or on ground for each movement type respectively: foot+amphibious+horse+hover, float, flying units
 

AGD

AGD

Level 16
Joined
Mar 29, 2016
Messages
688
General

- Dynamic map terrain (Allows changing terrain in-game, explained later)
- In the Gameplay Constants, allow changing what kind of bonuses are given by attributes (they must also be allowed to overlap on the kinds of bonuses they give)


JASS

1. Dynamic terrain manipulation

Consider the map's terrain as being formed by two-dimensional array of rectangular objects called tile, this individual tile is the minimum size at which the user can edit and manipulate the game's terrain looks. The array itself is static, initialized at map init, but the attributes of its elements (the tiles) can be changed.

Basic Type Structure:
JASS:
enum tiletype
    TILE_TYPE_LAND
    TILE_TYPE_WATER_SHALLOW
    TILE_TYPE_WATER_DEEP
    TILE_TYPE_RAMP

enum tilepathing
    PATHING_UNPATHABLE
    PATHING_WALKABLE = 0x1
    PATHING_HOVERABLE = 0x2
    PATHING_FLOATABLE = 0x4

class tile

    public static constant real TILE_WIDTH = <>
    public static constant real TILE_HEIGHT =  <>

    readonly real x // center x
    readonly real y // center y
    public integer elevation
    public tiletype type
    public tilepathing pathing

    public void swap(tile other)
//end class

private terrain array gameTerrain[MAP_TERRAIN_SIZE_X][MAP_TERRAIN_SIZE_Y]

private void BlzInitTerrain()
    // Runs at map initialization and initializes 'gameTerrain' to the premade terrain made using WE's terrain editor

Suggested APIs
JASS:
function GameTerrainGetTile takes real x, real y returns tile
    return gameTerrain[GetXCoordIndex(x)][GetYCoordIndex(y)]

function TileGetCenterX takes tile t returns real
function TileGetCenterY takes tile t returns real
function TileGetMinX takes tile t returns real
function TileGetMinY takes tile t returns real
function TileGetMaxX takes tile t returns real
function TileGetMaxY takes tile t returns real

function TileGetElevation takes tile t returns real
function TileSetElevation takes tile t, integer elevation returns nothing
function TileGetType takes tile t returns tiletype
function TileSetType takes tile t, tiletype type returns boolean
function TileGetPathing takes tile t returns tilepathing
function TileSetPathing takes tile t, tilepathing pathing returns boolean
function TileSwap takes tile a, tile b returns boolean


2. Attack Handling

Due to lack of proper attack handling, I actually made my own Attack System from scratch some time ago here. It brings A LOT of features. It only works on patch 1.30a though and was not completely polished specially on the attack animation part. For some reason it's messed up on the new patch.
So a native support for total control over attack handling would be really good.
JASS:
type attackevent extends event

constant attackevent EVENT_ATTACK_START
/*
*   Fires when attack animation starts
*/
constant attackevent EVENT_ATTACK_RELEASED
/*
*   Fires before the damage is dealt (for melee)
*   Fires before the projectile is launched and before <EVENT_ATTACK_PROJECTILE_LAUNCH> fires (for ranged)
*/
constant attackevent EVENT_ATTACK_PROJECTILE_LAUNCH
/*
*   Fires right after <EVENT_ATTACK_RELEASED> fires and before the projectile is launched (for ranged only)
*/
constant attackevent EVENT_ATTACK_PROJECTILE_IMPACT
/*
*   Fires when a projectile hits the target and before any damage event fires (for ranged only)
*/
constant attackevent EVENT_ATTACK_PROJECTILE_BOUNCE
/*
*   Fires when 'maxBounces' > 0
*   Fires after <EVENT_ATTACK_PROJECTILE_IMPACT> and after all damage event fires, and before bouncing to the next target
*/

constant event EVENT_PROJECTILE_DESTROYED
/*
*   Fires for both explicitly and implicitly destroyed projectiles (for ranged only)
*   For projectiles destroyed implicitly, this fires after <EVENT_ATTACK_PROJECTILE_IMPACT> and after all damage event fires
*/

type projectile extends handle
type attack

class projectile

    // For function API, all readonly fields should have its corresponding getter while public members should have its corresponding getter as well as setter functions
    public unit source
    public widget target
    public boolean showShadow
    public attacktype attackType
    public damagetype damageType
    public weapontype weaponType
    public real x
    public real y
    public real z
    public real targetX
    public real targetY
    public real targetZ
    public real speed
    public real minSpeed
    public real maxSpeed
    public real acceleration
    public real distanceTravelled
    public real maxDuration
    public real bounceRange
    public real pitch
    public real scale
    public real timeScale
    public real damage
    public integer maxBounces
    readonly integer currentBounces
    readonly boolean main // Checks if the projectile is the primary one in case of Split Shot abilities

    private integer sfxCount
    private string array sfx[sfxCount]

    public static projectile create(unit source, widget target)
    /*
    *   Does not play the unit's attack animation and does not interrupt orders (u can use this to launch a ranged attack from a moving unit, much like the phoenix)
    *   Fires the attack events except for <EVENT_ATTACK_START> and <EVENT_ATTACK_RELEASED>
    */
    public void destroy() // Explicit projectile destruction

    public void addSfx(string model)
    public void removeSfx(string model)
    /*
    *   Very useful for Orb Stacking systems where you need to superimpose many special effects on one projectile
    *   removeSfx() should also allow for removing the default model of the projectile
    */

class attack

    readonly projectile bullet // null if attack is melee

    // if the attack is ranged, the fields below should be null and the attack data should be set to the projectile's fields instead
    public unit source
    public widget target
    public real damage
    public attacktype attackType
    public damagetype damageType
    public weapontype weaponType

Suggested APIs (Aside from the ones mentioned above)
JASS:
/*
*   There are a lot to suggest, most of them are listed in this link
*   [URL]https://www.hiveworkshop.com/resources/attack-system-v1-1.79661/preview?trigger=1[/URL]
*/


3. Illusions

JASS:
function CreateIllusion takes unit source, real x, real y, real z, real facing, real duration returns unit
function CreateIllusionById takes integer unitId, real x, real y, real z, real facing, real duration returns unit

function IllusionGetBaseUnit takes unit u returns unit
function IllusionGetRemainingDuration takes unit u returns real
function IllusionGetElapsedDuration takes unit u returns real
function IllusionGetTotalDuration takes unit u returns real
function IllusionGetDeathEffect takes unit u returns string
function IllusionGetDamageDealtFactor takes unit u returns real
function IllusionGetDamageTakenFactor takes unit u returns real

function IllusionSetRemainingDuration takes unit u, real duration returns nothing
function IllusionSetTotalDuration takes unit u, real duration returns nothing
function IllusionSetDeathEffect takes unit u, string sfxpath returns nothing
function IllusionSetDamageDealtFactor takes unit u, real factor returns nothing
function IllusionSetDamageTakenFactor takes unit u, real factor returns nothing
function IllusionShowTimedLifeIndicator takes unit u, boolean enabled returns nothing

type illusion extends unit
would also be nice instead of the above functions having unit as parameter


4. Spell Cast Order

Seriously, the ability to order a unit to cast spells based SOLELY on oderids and not on ability rawcodes is very limiting
JASS:
function IssueSpellImmediateOrder takes unit u, integer spellId returns boolean
function IssueSpellPointOrder takes unit u, integer spellId, real targetX, real targetY returns boolean
function IssueSpellTargetOrder takes unit u, integer spellId, widget target returns boolean


5. Other

JASS:
function SetWidgetFacingInstant takes widget w, real rad returns nothing // VERY USEFUL

function SetEventSpellSource takes unit newSource returns nothing
function SetEventSpellTarget takes unit newTarget returns nothing
 
Last edited:
Level 24
Joined
Feb 9, 2009
Messages
1,783
Though I now entirely doubt that blizzard has even touched this thread or will ever...

Object fields equal to 0.00 mean the effect does not proc at all, i.e. no mini-stuns
If someone is so desperate to have a permanent effect they can make one last 27 hours and let me have the spell effect holding the unwanted.
 

deepstrasz

Map Reviewer
Level 68
Joined
Jun 4, 2009
Messages
18,706
Would really want a hide buff GUI trigger. Basically it should work by hiding the buff icon in the Status field not cancel/disable its effects. This would help with custom spells that require more buffs to work as intended but spells are supposed to have one buff shown. More would be superfluous when other spell buffs like those from auras would be present.
 

deepstrasz

Map Reviewer
Level 68
Joined
Jun 4, 2009
Messages
18,706
Replacing, editing or deleting a file in the import manager brings you to the first file in the list or somewhere far from where the replaced/deleted/edited file position was. This is very annoying when having loads of imported files that you have to search again for since there is no way to quick search for them but to scroll down using the alphabetic order sorting.
A possibility is to press an arrow key to bring the screen back where it was.
 

deepstrasz

Map Reviewer
Level 68
Joined
Jun 4, 2009
Messages
18,706
Can we please have building pathing textures adapt after the tiles they're over instead of the whole tileset?
(2)Waste Factory
178140-8dac620c5662dcbb65fb9b75ea4994bd.jpg
 

deepstrasz

Map Reviewer
Level 68
Joined
Jun 4, 2009
Messages
18,706
Would be neat to have more than two attack indices/weapons per unit.
Say you want a unit that attacks ground units using melee normal attack type, attacks air units from a distance/range with piercing and attacks buildings from a distance or melee with siege attack type.
That means, orb items should be able to enable more attack indices.
 
Level 25
Joined
Feb 2, 2006
Messages
1,669
Hey, is the first post of this thread still maintained or not? I think it is a good idea to collect the feature requests in the first post because this thread has far too many replies. Does Blizzard even look at this thread? Currently, they are only patching chicken footprints.

Some of my recent JASS requests:

Missing item fields:
  • Support the item integer field 'igol'. It is missing and returns the gold cost for an item. Is there any reason it is missing?
  • We can set the icon path of an item with:
    JASS:
    call BlzSetItemIconPath( GetLastCreatedItem(), "xxx" )
    but there is only the string field
    JASS:
    ITEM_SF_MODEL_USED
    . The icon path field is missing.
Missing fields in general:
  • Allow us to get all abilities of units and items:
    JASS:
    native BlzGetUnitAbilityCount takes unit whichUnit returns integer
    native BlzGetUnitAbility takes integer index returns integer
    native BlzGetItemAbilityCount takes item whichItem returns integer
    native BlzGetItemAbility takes integer index returns integer
Gameplay constants/user interface natives:
  • JASS:
    native SetGameplayConstant takes gameplayconstant g, real/integer/string/boolean value returns nothing
  • JASS:
    native GetGameplayConstant takes gameplayconstant g returns real/integer/string/boolean
  • JASS:
    native SetUserInterfaceConfig takes userinterfaceconfig g, real/integer/string/boolean value returns nothing
  • JASS:
    native GetUserInterfaceConfig takes userinterfaceconfig g returns real/integer/string/boolean
  • This would require advanced changes during the game. For example, if you decrease the maximum hero level, all heroes would have to change if they reached a level above and it would change their stats etc. etc. so I am not sure if this is a good idea. The same for example for corpses which decay.
Pathing layers and natives:
  • JASS:
    native SetWidgetPathingZ takes widget whichWidget, integer z returns nothing
  • JASS:
    native GetWidgetPathingZ takes widget whichWidget returns integer
  • JASS:
    native SetTerrainPathingZ takes real x, real y, integer z, pathingtype t, boolean flag returns nothing
  • JASS:
    native GetTerrainPathingZ takes real x, real y, integer z, pathingtype t returns boolean
  • JASS:
    native SetCustomPathingMap takes string file, integer z returns nothing
  • JASS:
    native GetCustomPathingMap takes integer z returns string
  • for Z the default value would be 0, so it works with all standard maps. However, different values allow different layers. When a unit enters a specific rect, you could change its pathing Z value.
Hero skill natives:
  • Allow us to reskill hero abilities:
    JASS:
    native SetHeroAbilityLevel takes unit hero, integer abilityId, integer level returns boolean
    It should not use or require skill points (helpful for custom systems)!
Progress natives:
  • Add to these existing natives some more:
    JASS:
    call UnitSetConstructionProgress( GetTriggerUnit(), 50 )
    call UnitSetUpgradeProgress( GetTriggerUnit(), 50 )
  • UnitSetTrainingProgress(GetTriggerUnit(), 50) - for the currently trained unit
  • UnitGetTrainingProgress(GetTriggerUnit()) - could be scripted manually with a timer but would be nice to have
  • UnitSetResearchProgress(GetTriggerUnit(), 50) - for the current research
  • UnitGetResearchProgress(GetTriggerUnit())
  • UnitSetRevivalProgress(GetTriggerUnit(), 50) - for the currently revived hero
  • UnitGetRevivalProgress(GetTriggerUnit())
  • Allow access and changes of all build time fields (object editor). They aren't listed in the trigger actions etc.
Chat natives:
  • JASS:
    native GetReceivingPlayers takes nothing returns force
    - returns all players who can read the message chatted by a player. Works together with the chat event.
  • JASS:
    native ChatMessage takes player sourcePlayer, force receivingPlayers, boolean all, boolean allies, boolean specificPlayer, string message returns nothing
    - Emulates a real chat message. Useful for insults etc. Maybe there could be a hint that it is automatically created to avoid confusion.
  • JASS:
    native HideChatMessage takes nothing returns nothing
    - Hide the entered chat message.
Multiboard natives:
  • JASS:
    TriggerRegisterMultiboardMinimizeEvent takes trigger whichTrigger returns event
    - Triggers when a multiboard is minimized or maximized. This is probably possible with the new custom frame natives.
  • JASS:
    GetTriggerMultiboard()
Timed life natives:
  • JASS:
    native GetUnitTimedLife takes unit whichUnit returns real
    Returns the current value of timed life for a unit.
  • JASS:
    native GetUnitTimeLifeTotal takes unit whichUnit returns real
    Returns the total value of timed life for a unit.
  • JASS:
    native GetUnitTimedLifeBuff takes unit whichUnit returns integer
    Returns the current ability ID for a buff for timed life for a unit.
Support more events:
  • [vJASS] - UnitEventsEx:
    • EVENT_ON_TRANSFORM
    • EVENT_ON_CARGO_LOAD
    • EVENT_ON_CARGO_UNLOAD
    • EVENT_ON_RESURRECTION
    • EVENT_ON_ANIMATE_DEAD
    • EVENT_ON_REINCARNATION_START
    • EVENT_ON_REINCARNATION_FINISH
  • heal events (from spells, items, regeneration and repairing): something like GetHealingUnit(), GetHealingItem(), GetHealedUnit(), GetHealingAbilityId()
  • mana restore events (from spells, items and regeneration): support something like GetManaRestoringUnit(), GetManaRestoringItem(), GetManaRestoredUnit(), GetManaRestoringAbilityId()
  • gold and lumber harvest/send events: GetSendingPlayer(), GetReceivingPlayer(), GetCollectingUnit(), GetResourceAmount(), GetResourceType() (lumber or gold)
  • XP events: GetGainedXP()
I know that there are already custom systems and workarounds for some of the events but native systems should be safer and cleaner and not THAT hard to implement.
I've seen some of this stuff has already been requested here: [Feedback] Request Features for JASS and the World Editor
Maybe you should collect more stuff in the first post of the thread to make it visible for Blizzard?

reverse natives:
  • PlaySoundReversed
  • SetUnitAnimationReverse (there is already a library for this but again a native would be cooler), SetDestructibleAnimationReverse, play doodad animations reverse
  • SetWaterTimeScale (it should allow a negative value like for special effects which will reverse the water animation on the whole map) or some natives to change the water texture/model during the game
  • SetWeatherEffectTimeScale: the same or a native to change the model for a weather effect to a custom model.
  • SetSoundPlayTimeScale: allow negative values to play the sound reverse and allow values to play it faster or slower
  • SetMusicPlayTimeScale: the same
  • SetThematicMusicTimeScale: the same
I guess the chance that these will be supported is very low but for my current map they would be fun to have.

natives to change fixed map settings:
  • SetGlobalWeather
  • SetCustomSoundEnvironment
  • SetCustomLightEnvironment
  • SetWaterTintingColor
  • SetPlayerRace (changes the music, the UI etc.)
 
Last edited:
  • Soundset editor: add custom soundsets, add/remove sounds from existing ones, and set sounds to any sound file in the game
    • Alternatively, just allow unitacksounds.slk to be overwritten through map import
  • Support filealiases.json functionality in some way
    • It makes sense that this is a protected file, but it would be cool if we could setup file aliases with the same limits as overwriting files with imports
  • Custom race creation: add any number of races that will show up in map setup, and allow modifying of music/console/etc per race
 
Level 19
Joined
Dec 12, 2010
Messages
2,069
  • heal events (from spells, items, regeneration and repairing): something like GetHealingUnit(), GetHealingItem(), GetHealedUnit(), GetHealingAbilityId()
  • mana restore events (from spells, items and regeneration): support something like GetManaRestoringUnit(), GetManaRestoringItem(), GetManaRestoredUnit(), GetManaRestoringAbilityId()
this engine wont work well with all that stuff, JASS threads are heavy
also
regeneration is a vector-based process, where game doesn't heal the unit all the time, updating it's current HP, but rather has 'last HP known' field which updates on damage/heal/regen value manipulations. So this is kinda.. pointless
 
Level 25
Joined
Feb 2, 2006
Messages
1,669
this engine wont work well with all that stuff, JASS threads are heavy
also
regeneration is a vector-based process, where game doesn't heal the unit all the time, updating it's current HP, but rather has 'last HP known' field which updates on damage/heal/regen value manipulations. So this is kinda.. pointless
What do you mean by "JASS threads are heavy"?. Each thread has its own stack? You mean that they are updating a global value which is then applied to the unit at some point? There are also on damage events with the damage amount, source and target. They could change the way they heal units/regenerate their mana. Even if its vector based, they could store the event information in a vector as well? Maybe it slows down the process a bit but it would be worth it. The custom systems which check for changing unit stats cannot detect the source of HP/mana regeneration. I would need to use custom spells for all regeneration stuff to know what the source is.
 
Level 26
Joined
Dec 3, 2018
Messages
867
Fix that bug which makes upgrades un-desupgradable. There is an option to set the level of the upgrade to a number, but sadly we cannot set it to a lower number than it currently is.
The possibility of adding more races (not only Human undead Night elf and orc), which will be great for altered mele games
The possibility of making custom statuses from units (not only ward, worker, undead, mechanical etc etc)
The possibility of making custom ability UIs so we can finally get the possibility of making infinite spells
This is kinda big, but how about making a model maker and an icon maker? (Or simply make an unofficial one official and stick it with the editor. Retera did a crazy good job with the model maker, you might want to take a look at that; if I were you I would hire that guy :p, it would mean a lot for the community)
 
Level 25
Joined
Feb 2, 2006
Messages
1,669
Some suggestions:
  • Pathing map preview: I would like to have a preview window for pathing maps. Otherwise, I have to use them and look at the unit on the map. It would be nice to show the collision radius units as well when showing the pathing in the editor. And of course as some have already written some brush for manual pathing and options if placed objects overwrite this pathing or not.
  • Advanced test settings: so I can choose which player I play and which player slots are filled with computer players etc. I want to test my map in a different team.
  • Smart level replacement in object editor: One of the oldest bugs is that when I automatically fill object data into fields and it replaces the level, it also replaces the number of the ability ID if it has a 1 in it. Fix it!
  • Available bug for upgrades: When I create an upgrade in the object editor which has the effect to make a unit available, the OK button is disabled for Available and I have to change it not Available. Besides the initial value is 0.
  • Allow all handle values in trigger editor: When I select a handle parameter in the trigger editor, I cannot choose a unit/item/destructable variable or from the map although handle is a parent type of them. I have to use custom script to assign a unit variable to the handle variable!
  • Add an option to hide white circles for unit/destructable item drops. They are quite annoying when terraining. They only disappear when I hide units.
  • Do not reset the fixed Z height when copying Doodads. I have disabled "Reset fixed object heights" but when copying a torch with a fixed Z value it resets it.
  • Add a flag to use the classic version of a model and the classic textures. This allows us to use classic version without reimporting the model and playing the map in HD.
  • Allow unlimited cliff levels on top of each other.
  • Allow changing the base cliff level/water level for a map after it has been created.
  • Simplify linked operations in the trigger editor and preselect "matching" entries for filters: Simplify the possibility to add another and or or condition to filters for units in unit groups or players in player groups. Usually you have to add multiple and conditions etc. but when you need to add a another condition you have to discard one and replace it with something. This is the same for arithmetic operations and concatenate strings operations. Whenever you forgot something, it is hard to append or prepend it easily. Also preselect "Matching unit" or "Matching Player" for the selected conditions.
  • Add a button with some kind static check in the trigger editor whenever you choose a certain type of unit like "Matching Unit" or "Picked Unit" or "Attacked Unit" check whether the trigger is in a pick loop, matching condition or has the corresponding event. This will not find all bugs but might help to detect invalid usage of such functions.
  • Fix unit height of flying units on water. If I give them a negative height, it is calculated from the water surface ingame but in the editor it is calculated from the ground surface.
  • Allow giving units a negative flying height via triggers. This is useful for units which fly under water.
  • Increase Far Clip Z maximum value from 10 000 to something much higher. In some maps you want to see everything even if it might lag on certain computers.
  • Add trigger function "Random Point in Region with matching condition": You could choose the pathing type or other conditions for the location. Sometimes you want to get a point in a region which is water.
  • Allow placing items in water/changing the collision size/placement requirement for items: I want to place items under water in my map. Swimming units could be able to pick them up.
  • Trees are not visible under water?! Only their death animation is seen. All other Doodads are. Maybe it is only the custom model of the coral tree.
  • Allow changing the fog and weather effects for players only.
  • Allow command button effects for players only.
  • Allow quest minimap icons for players only.
  • Allow custom symbols for quest minimap icons rather than only predefined values.
  • Allow enabling seeing the water texture from both sides: useful for underwater maps.
  • Allow modifying the water model/water textures via some object editor (there is a water SLK).
  • The same for weather effects, lightnings, ubersplats etc.
  • Function which returns the Z of the actual ground surface below the water surface considering plateaus etc. not only cliff levels.
  • Add some button in the string editor for the default color code |cffffcc00.
  • When changing the "Game Data Set" in the map options it does not update the object data. I have to close and open the map again.
  • Allow copying and pasting object editor fields in an append mode. So you can add certain values to a list instead of replacing the whole list.
 
Last edited:
Level 10
Joined
May 31, 2019
Messages
137
It would be nice to be able to add custom Event Objects to the editor (Those things you attach directly to models, like sounds, splats, footprints, spawns, etc). Right now, custom models can only use existing event objects. To add new ones you either have to replace existing ones, or add new ones to a custom slk and then have your end user add it to the correct place in their war3 folder, and fiddle with their registry. It would be much nicer to directly support this in the editor.

This is similar to the open request for custom unit soundsets. So I guess I would like to be able to create new entries of everything stored in every SLK file... in the world editor. This would also allow people to create new tilesets.

It would also be nice to create 'mods' like the StarCraft 2 system, where people can use mods as dependencies for their project.
 
  • New / Exposed object editor fields that allow one to dynamically specify the cast point / backswing of spells. Can also be specified to cast instantaneously if the spell issues an immediate order.

  • Get an ability handle's rawcode. Exposed as BlzGetAbilityId in the latest PTR (Thanks Bribe).

  • Proper silence / unsilence event.

  • Requirement bug fix (with multiple requirements, only one would be in effect)

  • Attack Point / Launched event (Runs whenever the unit's attack has reached the attack point.)

  • Exposed native to get attack speed bonus modifier (both capped and uncapped).
  • New function that retrieves the index of a requested animation sequence (string parameter) of a given model. (Returns 0 if not found).
  • If not already possible, make SetUnitAnimation play a unit's walk or run animation when requested.
Major:
  • Tiered Spell Immunity mechanics (For example, spell A has Spell Effectiveness level of 1. It will pierce through units with spell Immunity if the highest tier of said spell Immunity is equal to or less than the Spell Effectiveness level. Will not pierce through units with a Spell Immunity tier higher than the Spell Effectiveness level).

  • Expand the Sound Editor to allow soundset imports directly.
Edit:
- Added new suggestions related to models (should show up as non-compliant formatted bulleted items)
 
Last edited:

Bribe

Code Moderator
Level 50
Joined
Sep 26, 2009
Messages
9,456
- Get an ability handle's rawcode.
BlzGetAbilityId was added in 1.33 PTR, so that's one item off of your list :)
- Attack Point / Launched event (Runs whenever the unit's attack has reached the attack point.)
Attack Engine is the closest match, but having to register custom abilities can get annoying. A simple BlzGetUnitCurrentAttackSpeed would simplify things a lot, but the "attack launch" event would be welcome and should incorporate a boolean that allows things like natural critical strike/evasion/curse/bash to be detected for that specific event.
 
Last edited:
Level 10
Joined
May 31, 2019
Messages
137
Other things I'd like.

In the Open Document window, It'd be nice to just paste in the path the folder that has the map you need. Currently you gotta hit Browse and then click through the navigation from your hard drive's root all the way to your desired folder. Very 2002... but I think even original world editor didn't have this issue.
 

Wrda

Spell Reviewer
Level 25
Joined
Nov 18, 2012
Messages
1,864
Other things I'd like.

In the Open Document window, It'd be nice to just paste in the path the folder that has the map you need. Currently you gotta hit Browse and then click through the navigation from your hard drive's root all the way to your desired folder. Very 2002... but I think even original world editor didn't have this issue.
Yeah, it didn't have. I wish they just reverted that...
 

Bribe

Code Moderator
Level 50
Joined
Sep 26, 2009
Messages
9,456
Other things I'd like.

In the Open Document window, It'd be nice to just paste in the path the folder that has the map you need. Currently you gotta hit Browse and then click through the navigation from your hard drive's root all the way to your desired folder. Very 2002... but I think even original world editor didn't have this issue.
The worst offender is having to resize that window even on a 1080p screen just to see the button at the bottom.
 
Level 25
Joined
Feb 2, 2006
Messages
1,669
Some more ideas after working on my map and playing multiple custom games.

Debugging:
Debugging maps, JASS and AI code is hell.
The maps can randomly crash and we never know what caused the crash.
Please add verbose stacktraces with variable values on crashes, so we can fix our maps.
I had several crashes from AI scripts for months and don't what exactly causes it since it might happen after 40 minutes of gameplay.
Enabling/disabling stuff takes forever and you might never find the issue.
Breakpoints would be nice.

Advanced Test Settings:
Sometimes I want to test the map with multiple AI players.
Just add a GUI to configure advanced test settings.
Allow to configure how many instances of Warcraft should be started to allow fast multiplayer tests.

Haunted Goldmines:
Allow to configure building types to be classified as haunted goldmines which automatically become a gold mine on death. I had to replace the dying unit with a gold mine using a trigger.

Increase the limit in gameplay constants for the heroes field
Maps with many heroes suffer from this limit.

Native AI Navy support:
New natives in common.ai:
JASS:
// the player might buy ships including transport ships
native SetNavy takes boolean s returns nothing
native PurchaseTransportShip     takes nothing                               returns nothing

Make the player smart enough on how to reach which land targets and consider ships which can attack air units.
You can still manually specify the trained units in an campaign AI script.
The AI player should make sure that he attacks only when he can reach targets from the sea. Otherwise, ships should return to shipyards/base.
There could be a native to specify this return point for ships.

Multiple concurrent AI targets:
Allow AI scripts to attack multiple targets at the same time. It seems that campaign AIs only can attack one single target at a time.

Allow extending common.ai/providing common functions for all AI scripts in a map
Add a section to the trigger editor for AI functions or simply let the AI scripts call all functions available in the map script (not sure about it since I extended the existing common.ai file to provide more functions. Blizzard.j functions seem not to be available in AI scripts. Probably because some of them might lead to crashes. I had many AI functions in my map which needed to be called in multiple AI scripts.

Advanced Destructable API:
JASS:
// the event stuff would be useful for items as well:
- type destructableevent extends handle
- constant native ConvertDestructableEvent          takes integer i returns destructableevent
- constant destructableevent EVENT_DESTRUCTABLE_ATTACKED                             = ConvertDestructableEvent(xxx)
- constant destructableevent EVENT_DESTRUCTABLE_DAMAGED                             = ConvertDestructableEvent(xxx)
- constant destructableevent EVENT_DESTRUCTABLE_RESTORED_LIFE                             = ConvertDestructableEvent(xxx) // could also be triggered on repair events
- constant destructableevent EVENT_DESTRUCTABLE_SELECTED                             = ConvertDestructableEvent(xxx) // also useful for items
- constant destructableevent EVENT_DESTRUCTABLE_DESELECTED                            = ConvertDestructableEvent(xxx)
- constant native GetTriggerDestructable takes nothing returns destructable
- constant native GetRestoredDestructableLife takes nothing returns real

// some useful natives
- native SetDestructableX takes destructable d, real x returns nothing
- native SetDestructableY takes destructable d, real y returns nothing
- native SetDestructableZ takes destructable d, real z returns nothing
- native GetDestructableZ takes destructable d returns real
- native SetDestructableVariation takes destructable d, integer variation returns nothing
- native GetDestructableVariation takes destructable d returns integer
- native SetDestructableScale takes destructable d, real scale returns nothing
- native GetDestructableScale takes destructable d returns real
- native IsDestructableHidden  takes destructable d returns boolean
- native SetDestructablePathing takes destructable d, boolean enabled returns nothing
- native IsDestructablePathingEnabled  takes destructable d returns boolean
- native SetDestructableWalkable takes destructable d, boolean enabled returns nothing
- native IsDestructableWalkableEnabled  takes destructable d returns boolean

// targetting which is useful for filtering certain destructables (for example if you want to filter for all trees in an area)
// there is already the constant UNIT_IF_TARGETED_AS for the integer field for units which can be used with the native ConvertTargetFlag
// either provide natives with integer fields of destructable types or these two natives:
- native IsDestructableTargetedAs  takes destructable d, targetflag t returns boolean
- native SetDestructableTargetedAs  takes destructable d, targetflag t, boolean flag returns nothing

Actually, they could provide new types like
JASS:
destructablerealfield
like they did for units and items.

Destructable filter functions in GUI trigger actions. It is possible to filter for certain destructables with the native
JASS:
EnumDestructablesInRect
but the GUI actions do not offer this feature.

I had some issues with walkable destructables/Doodads. Sometimes the preplaced units were on top, sometimes not and even replacing the units did not always help.

Some function like
JASS:
ReplaceUnitBJ
available in GUI triggers (for example
JASS:
ReplaceDestructableBJ
(the same for items) would be useful, too.

Handle Group APIs:
We have group but what about itemgroup, destructablegroup, floatingtextgroup etc.?
Filling arrays is much harder since we need a counter to increment the size which means two variables. Besides, it might be slower to check if an item is in an array than handling it with some kind of hashtable in the background. There are vJass code systems etc. for linked lists etc. but a native approach will always be faster and might be easier to use.
Just provide the same API types and functions as for the type group for these new types.
We only have group and force for now.

Minimap Zoom API:
When you change the camera bounds for a player the minimap is not changed which makes no sense.
This native would allow you to zoom in to certain areas.
It would work if the minimap could be stored with a higher resolution.
We played WoW Reanimated which has plenty of dungeons and a really big map size.
Changing the minimap to the dungeons would help for big maps to still see anything on map.

JASS:
// changes the zoom to scale starting from the point x and y on the map
// can be used with GetLocalPlayer
native SetMinimapScale takes real x, real y, real scale returns nothing
// gives you the boundaries of the minimap
constant native GetMinimapSizeX takes nothing returns real
constant native GetMinimapSizeY takes nothing returns real
native ConvertMapXToMinimapX takes real x returns real
native ConvertMapYToMinimapY takes real y returns real
 
Level 10
Joined
May 31, 2019
Messages
137
It would be real nice to have syntax highlighting, in both JASS and LUA. Third-party editors have had this for 15+ years, so it should be possible.

I don't know if this is exclusive to LUA or not, but if I Select All in my map script, and CTRL-V to paste my updated script, it gets replaced with gibberish. But if I Select All, then backspace to erase it all, then I can CTRL-V without problem. Not a huge issue, but it feels like an unnecessary extra hoop to jump through.

Also, how bout an event to detect a unit starting/stopping harvesting?
 
Last edited:

Wrda

Spell Reviewer
Level 25
Joined
Nov 18, 2012
Messages
1,864
Advanced Destructable API:
JASS:
// the event stuff would be useful for items as well:
[*]type destructableevent extends handle
[*]constant native ConvertDestructableEvent          takes integer i returns destructableevent
[*]constant destructableevent EVENT_DESTRUCTABLE_ATTACKED                             = ConvertDestructableEvent(xxx)
[*]constant destructableevent EVENT_DESTRUCTABLE_DAMAGED                             = ConvertDestructableEvent(xxx)
Is EVENT_DESTRUCTABLE_ATTACKED the equivalent of the unit counterpart EVENT_UNIT_ATTACKED?
// some useful natives
  • native SetDestructableX takes destructable d, real x returns nothing
  • native SetDestructableY takes destructable d, real y returns nothing
  • native SetDestructableZ takes destructable d, real z returns nothing
  • native GetDestructableZ takes destructable d returns real
  • native SetDestructableVariation takes destructable d, integer variation returns nothing
  • native GetDestructableVariation takes destructable d returns integer
  • native SetDestructableScale takes destructable d, real scale returns nothing
  • native GetDestructableScale takes destructable d returns real
  • native IsDestructableHidden takes destructable d returns boolean
  • native SetDestructablePathing takes destructable d, boolean enabled returns nothing
  • native IsDestructablePathingEnabled takes destructable d returns boolean
  • native SetDestructableWalkable takes destructable d, boolean enabled returns nothing
  • native IsDestructableWalkableEnabled takes destructable d returns boolean
I think doodads also could have these as well, if not most.

I think the event EVENT_DESTRUCTABLE_DAMAGE would be indicative for harvesting stuff too.

It would be real nice to have syntax highlighting, in both JASS and LUA. Third-party editors have had this for 15+ years, so it should be possible.
While at it, intelli-sense would be nice :D
 
Level 25
Joined
Feb 2, 2006
Messages
1,669
Object data without level-specific data

In my map World of Warcraft Reforged I had all hero ability levels set to a maximum of 100 to allow players much longer gameplay/leveling since the maximum hero level is 500 and you can skill 5 * 100 ability levels. However, this decreased the loading time massively from like 20-30 seconds to 2 minutes and for many players it led to a disconnect. First of all, the disconnect should be fixed in Reforged but the long loading time is still not acceptable especially if you have to rehost the game multiple times due to leavers.

Sure, I could reduce the XP rate but then you can skill an ability every 2 hours which is NO fun at all and since the number of hero abilities is limited and not every map has a custom skill system with unit abilities, this is not an option.

The long loading time is due to the many per level values in the object data. Widgetizing is annoying as well and the Widgetizer couldn't even handle the big number of ability level fields, so it crashed.

Hence, I had this simple idea based on how the research effects are handled in object data:

  • Allow to set a boolean flag field per ability and research which says "No specific level values".
  • If this value is set to true there is no DataA1, DataA2, DataA3 or Col1, Col2, Col3 fields etc. Instead you define the base value and a level factor value like for effects of Warcraft III researches. The actual value is calculated at runtime considering the current ability level for the unit/hero. It won't work for all types of fields like unit types or flags but for integers and reals which is enough for most abilities and researches with multiple levels.
  • This would require more text placeholders for the current level like in the ability learn tooltip: "Blizzard - Level %d", so you can define only one tooltip text.
  • To my knowledge the actual values are stored in memory per ability anyway since there are natives to retrieve and change the exact values per ability per unit at runtime. They could be calculated and stored whenever the ability level is changed for example when you call
    JASS:
    SetUnitAbilityLevel

This solution would allow you to create abilities and researches with like 5000 levels without any significant longer loading time.
They would probably load even faster than the current abilities and researches which have more than 1 level.
This feature would be really useful for maps with long gameplay and savecodes.

Currently, this can only be achieved with triggers by changing the stats of the ability per unit with the help of the new natives. I am not sure if you can change the tooltips without issues.

Standard Summon Ability with fields for the units stats

There are multiple summon abilities like Summon Water Elemental and Dark Portal.
All of them allow you to specify a unit type.
If the ability has many levels like 50 it would be too much work to create like 50 different unit types.
In my map I use a trigger which detects the summoning event and changes the stats of the unit due to the skilled ability level.
Blizzard could add a standard ability which lets you specify the unit type once and the stats bonuses per level like:
  • HP bonus for summoned unit
  • Mana bonus for summoned unit
  • Damage Dices bonus for summoned unit
  • etc.
This would work better if they added the feature I mentioned before with "no specific level value".

Dark Portal with Time Limit

We all know Archimonde's Dark Portal ability which is pretty awesome and useful. Just add a boolean flag "Limited Time" which considers the duration. I had to solve this issue with a trigger.

File API

Workarounds are currently used to read and write files in the directory "C:\Users\XXX\Documents\Warcraft III\CustomMapData" to store savecodes for example. Since we do it anyway, they could just provide these two simple natives:

JASS:
native WriteFile takes player whichPlayer, string name, string content return boolean
native ReadFile takes player whichPlayer, string name return string

Reading a file automatically synchronizes the content from one player only with the rest, so the resulting string is always sync. They could provide the natives without specifying the player and allow using GetLocalPlayer instead.


Joining Players

Certain maps could allow joining players. The flag could also be overwritten in the lobby of the game.
It would only need these two constants:

JASS:
constant playerevent EVENT_PLAYER_JOIN          = ConvertPlayerEvent(xxx)
constant mapflag            MAP_ALLOW_JOINING_PLAYERS                = ConvertMapFlag(xxx)

The trigger player is joining the game and replacing an empty slot or the slot of a leaving player.
This would allow to host maps as servers like for other multiplayer games and make the games more interesting since they will find a running game with a changed map.

Sync changing level and game cache

Allow changing levels with game cache data which is synchronous for all players. The level map is downloaded from one player and the game cache data is also synchronized from one player. This allows to play something like the Bonus Campaign in multiplayer.

JASS:
native ChangeLevelSync takes player host, string newLevel returns nothing
native LoadGameSync takes player host, string saveFileName returns

Both files will force the other players to download the new level and save file from the specified host player if they do not have it already.
Allow to use natives like SaveGame, RenameSaveDirectory, RemoveSaveDirectory, CopySaveGame and SaveGameExists
to be used with GetLocalPlayer to do it only for the host, for example.
This would allow the specified host player to create the save games etc. just before changing the level.

For the game caches it would require the following natives:

JASS:
native  ReloadGameCachesFromDiskSync takes player host returns boolean

native  InitGameCacheSync    takes player host, string campaignFile returns gamecache
native  SaveGameCacheSync    takes player host, gamecache whichCache returns boolean

Again the game cache file is downloaded from the specified host player and synchronized with all other players.
This would allow to store and load hero data from the previous level.

I think with these few natives you would change the possibilities of multiplayer campaigns, RPG servers etc. massively. I guess it will never happen.

Extended Warcraft III files per map/campaign

Allow extending existing files from Warcraft III in maps and campaigns. This would help adding additional entries without removing the default ones.
The following files could be extended:
  • common.j
  • common.ai
  • Blizzard.j
  • TriggerData.txt
  • TriggerStrings.txt
  • All SLK files (for example soundsets, unit data etc.)
The "extend" option could be set in the "Import Manager"/"Asset Manager" per file. The file would not overwrite the existing file from Warcraft III but would just extend its content.
This feature would allow custom sound sets, global AI script functions, custom GUI functions, widgetized object data etc. etc. without the requirement of merging and updating files whenever Warcraft III is updated. It would make life as a modder so much easier.

Research to reduce/change training/building/upgrading/stock replenish interval time and stock maximum of unit types and item types

It would be nice to allow such an affect per unit and item type and it would only affect the buildings which have the research configured.

Team colored icons

Many icons have parts in it which are the team color of the unit. It should be possible to mark icon areas as team colors, maybe with a special color value or alpha. These areas should have the team color of the buying unit/building unit/selected unit etc.

Path API

The API allows you to check if areas are reachable and to understand how Warcraft will calculate the paths of units.

JASS:
type path extends handle

// could also use movetype instead
native GetPath takes real sourceX, real sourceY, real targetX, real targetY, pathingtype t returns path
native DestroyPath takes path p returns nothing
native GetPathSize takes path p returns integer
native GetPathPosX takes path p, integer index returns real
native GetPathPosY takes path p, integer index returns real

Attack Cooldown API

JASS:
native SetUnitAttackCooldown takes unit whichUnit, integer index, real cooldown returns nothing
native GetUnitAttackCooldown takes unit whichUnit, integer index returns real
native ResetUnitAttackCooldown takes unit whichUnit, integer index returns nothing


Extended UI API

Allow to have more space in the UI and to use custom race UIs. Custom races support would be even better.

JASS:
// some of them are probably possible by getting the ability but this would be easier to use
native UnitHideAttackAbility takes unit whichUnit, boolean flag returns nothing
native UnitHideMoveAbility takes unit whichUnit, boolean flag returns nothing
native UnitHideStopAbility takes unit whichUnit, boolean flag returns nothing
native UnitHideHaltAbility takes unit whichUnit, boolean flag returns nothing
native UnitHidePatrolAbility takes unit whichUnit, boolean flag returns nothing
native UnitHideRallyPointAbility takes unit whichUnit, boolean flag returns nothing
native UnitHideSelectUserAbility takes unit whichUnit, boolean flag returns nothing
native UnitHideSelectHeroAbility takes unit whichUnit, boolean flag returns nothing
native UnitHideHeroSkillsAbility takes unit whichUnit, boolean flag returns nothing
native UnitHideBuildAbility takes unit whichUnit, boolean flag returns nothing

// can be used with GetLocalPlayer:

function SetAreaOfEffectModel takes string model returns nothing
function SetAreaOfEffectTexture takes string texture returns nothing

function SetRallyPointModel takes string model returns nothing
function SetRallyPointTexture takes string texture returns nothing

// more generic game interface API with GetLocalPlayer:
type gameinterfaceintegerfield extends handle
type gameinterfacestringfield extends handle
type gameinterfacebooleanfield extends handle
type gameinterfacerealfield extends handle

native SetGameInterfaceString takes gameinterfacestringfield whichField, string value returns nothing
native GetGameInterfaceString takes gameinterfacestringfield whichField returns string
native SetGameInterfaceInteger takes gameinterfaceintegerfield whichField, integer value returns nothing
native GetGameInterfaceInteger takes gameinterfaceintegerfield whichField returns integer
native SetGameInterfaceBoolean takes gameinterfacebooleanfield whichField, boolean value returns nothing
native GetGameInterfaceBoolean takes gameinterfacebooleanfield whichField returns boolean
native SetGameInterfaceReal takes gameinterfacerealfield whichField, integer real value returns nothing
native GetGameInterfaceReal takes gameinterfacerealfield whichField returns real


Event API

JASS:
// triggers when the item is actually dropped, the same could be supported for an item pawn event (before and after events)
constant playerunitevent EVENT_PLAYER_UNIT_DROP_ITEM_DONE                  = ConvertPlayerUnitEvent(XXX)
constant unitevent EVENT_UNIT_DROP_ITEM_DONE                                = ConvertUnitEvent(XXX)

constant playerunitevent EVENT_PLAYER_UNIT_BUFF_ADDED                   = ConvertPlayerUnitEvent(XXX)
constant unitevent EVENT_UNIT_BUFF_ADDED                                = ConvertUnitEvent(XXX)
constant playerunitevent EVENT_PLAYER_UNIT_BUFF_REMOVED                   = ConvertPlayerUnitEvent(XXX)
constant unitevent EVENT_UNIT_BUFF_REMOVED                                = ConvertUnitEvent(XXX)

native GetTriggerBuffSource takes nothing returns unit
native GetTriggerBuff takes nothing returns integer

Hero Skill API

The maximum number of hero abilities should not be 5. It should simply be unlimited even if they are not shown.

JASS:
native SetHeroMaximumSkills takes unit hero, integer maximum returns nothing
native GetHeroMaximumSkills takes unit hero returns integer
native GetHeroSkill takes unit hero, integer index returns integer
native GetHeroSkillCount takes unit hero returns integer
native ReplaceHeroSkill takes unit hero, integer old, integer new returns nothing

Plugin API

Plugins could be written for example in C/C++ and be placed in the players directories. They do not have to be enabled for all players at the same time in the same game. Plugins can retrieve data from the running game and send data from the running game. The player is always a parameter.

JASS:
// returns if the player has the 
native PlayerHasPlugin takes player whichPlayer, string pluginDllName returns boolean
native GetPlayerPluginVersion takes player whichPlayer, string pluginDllName returns string
native SendPluginData takes player whichPlayer, string pluginDllName, string data0, string data1, string data2, string data3 returns boolean
native TriggerRegisterPluginReceiveData takes trigger whichTrigger returns event
// GetTriggerPlayer is the player whose plugin the data is sent from
native GetPluginDllName takes nothing returns string
native GetPluginData0 takes nothing returns string
native GetPluginData1 takes nothing returns string
native GetPluginData2 takes nothing returns string
native GetPluginData3 takes nothing returns string

In C++ you will somehow have to define the version or it is extracted from the DLL. The plugins would make it easier to transfer game data like into files/databases/live stats of games etc. etc. They could also make really fast calculations.
 
Last edited:
Status
Not open for further replies.
Top