• 🏆 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.
Daffa said:
Don't really think it's much of necessity, though for passives it could work out. I doubt people want to hide active abilities in most cases.
I want to hide actives when recreating League's summons, where the ability is temporary replaced by a command one.

Daffa said:
Most of the time, one would not reach the 522 limits at all. It's there for Melee balance purposes. So far, I recall Bribe or Purge have a MoveSpeedX to bypass this. I also assume this is related to pathfinding algorithm limitation.
Melees won't exceed it. Auras don't stack with themselves. However, there's no reason for it to be this inflexible when it comes to custom games, especially since there's a field for max movement in Gameplay Constants.
I tried movement speed in Dota 2 in the thousands. It worked fine. That is something Blizzard should aspire to with Reforged.

Daffa said:
3. Allows a direct stun from trigger editor. Usually, people relied on the flawed stun systems and the existence of this thing will help a lot on the regard of stun related spells and triggers.
That's wonderful, man. We won't have to create all sorts of abilities to clog our loading screens. I should suggest a triggered slow (could be negative). Perhaps a buff function (directeffect FX (?), integer buffID, boolean debuff) can be intertwined with these natives.
 

Kyrbi0

Arena Moderator
Level 45
Joined
Jul 29, 2008
Messages
9,502
Auras do stack with themselves; prior to one of the recent patches they were just about the only ones that did, in fact.

Also, like Daffa mentioned, both Passive & Active abilities can be set to X:0 & Y:-11 in order to be hidden (while still usable, AFAIK).
 
Level 14
Joined
Jan 16, 2009
Messages
716
@deepstrasz You can't go faster than 522 by giving an order. It will be the same as ordering it manually. The only thing you could do is recode the whole pathfinding algorithm and manually move the unit but that would probably work terribly in jass since it's already quite heavy in C++.

@Mythic They will probably not redo it since it's important for it to feel the same as now for the competitive melee scene. The best they could do is optimize it so it runs much faster but I am not sure there is room for that type of optimization.
 
My suggestion was to remove it. I did give it a few pages back (Gameplay Section).

E:
I'd like to clarify that I wasn't saying mappers should have the final say on the matter. Rather, I was asking whether or not in principle they should be able to risk breaking their maps with extremely high movement.
 
Last edited:

deepstrasz

Map Reviewer
Level 69
Joined
Jun 4, 2009
Messages
18,876
You can't go faster than 522 by giving an order. It will be the same as ordering it manually. The only thing you could do is recode the whole pathfinding algorithm and manually move the unit but that would probably work terribly in jass since it's already quite heavy in C++.
I meant if they'd increase the speed in a new patch :rolleyes: would it matter that much if you'd use that speed for special units like projectiles, considering the pathing?
 
Level 24
Joined
Feb 9, 2009
Messages
1,787
Some love for the GUI users please

Temporary heath triggers:
* Not adding max health or using mana shield, something akin to anti magic shield but more options! *
- Add x Temporary health to (triggering unit) for Physical type damage for x seconds.
- Modify existing Temporary heath for (triggering unit) to x
- Add X seconds to existing Temporary heath for (triggering unit) to x
- show/hide Temporary health bar under heath bar

Modify unit Ability Data values
- Change (triggering unit) inner fire level 1/X - data - Regeneration Rate/Armor/Duration/STRING to X

Add Dummy triggers
- Cast X spell at Location/Target x with (Triggering unit) as Source - (This would remove the need for dummy unit's)
- Add Buff to (Triggering Unit) and Enable/Disable effect X (I.e. Stun/Poison/Curse/ Using X Ability without need of physical cast, just simply the effect) for X seconds


Multiple copy selection of units/abilities/buffs for transferring over to another map! or an option to inject multiple items into a map without overwriting other ones.

@WeirdEditor
I concur!
 
Last edited:
I suppose that these natives (types) have already been requested, but having these may benefit mapmakers as a whole:

JASS:
// For items
type itemevent extends eventid

constant itemevent EVENT_ITEM_CREATED
constant itemevent EVENT_ITEM_REMOVED

// For destructables
type destructableevent extends eventid

constant destructableevent EVENT_DEST_CREATED
constant destructableevent EVENT_DEST_REMOVED

// For the onDamage event
constant native IsEventDamageAttack takes nothing returns boolean
constant native IsEventDamageOrb takes nothing returns boolean

// For the events EVENT_PLAYER_MOUSE_UP and EVENT_PLAYER_MOUSE_DOWN
type mousebutton extends agent

native GetTriggerMouseButton takes nothing returns mousebutton

// An extension to the ability tooltip alteration
native SetUnitAbilityTooltip takes unit whichUnit, integer abilId, integer level, string tooltip returns nothing
native SetUnitAbilityExtendedTooltip takes unit whichUnit, integer abilId, integer level, string tooltip returns nothing
native SetUnitAbilityResearchTooltip takes unit whichUnit, integer abilId, integer level, string tooltip returns nothing

native GetUnitAbilityTooltip takes unit whichUnit, integer abilId, integer level returns string
native GetUnitAbilityExtendedTooltip takes unit whichUnit, integer abilId, integer level returns string
native GetUnitAbilityResearchTooltip takes unit whichUnit, integer abilId, integer level returns string

// A way to make alterations to the base damage permanent
native SetUnitBaseDamageEx takes unit whichUnit, integer index, integer base, boolean makePermanent returns nothing

// More on unit's attack
type missiletype extends agent

constant missiletype MISSILE_INSTANT
constant missiletype MISSILE_NORMAL
constant missiletype MISSILE_ARTILLERY
constant missiletype MISSILE_LINE
constant missiletype MISSILE_BOUNCE

native SetUnitAttackRange takes unit whichUnit, integer index, real range returns nothing
native SetUnitAttackMissileType takes unit whichUnit, integer index, missiletype missType returns nothing
native SetUnitAttackMissileSpeed takes unit whichUnit, integer index, real speed returns nothing
native SetUnitAttackBounceCount takes unit whichUnit, integer index, integer count returns nothing
native SetUnitAttackBounceRange takes unit whichUnit, integer index, real range returns nothing
native SetUnitAttackWeaponType takes unit whichUnit, integer index, weapontype whichWeapon returns nothing

// Already suggested a lot of times by me, but included for the sake of completeness
native GetUnitAttackRange takes unit whichUnit, integer index returns real
native GetUnitAttackMissileType takes unit whichUnit, integer index returns missiletype
native GetUnitAttackMissileSpeed takes unit whichUnit, integer index returns real
native GetUnitAttackBounceCount takes unit whichUnit, integer index returns integer
native GetUnitAttackBounceRange takes unit whichUnit, integer index returns real
native GetUnitAttackWeaponType takes unit whichUnit, integer index returns weapontype

native GetUnitDefaultBaseDamage takes unit whichUnit, integer index returns integer

// On attack-event related natives
constant unitevent EVENT_UNIT_ATTACK_LAUNCH
constant unitevent EVENT_UNIT_ATTACK_MISS

native GetUnitAttackDefaultBackswing takes unit whichUnit, integer index returns real
native GetUnitAttackDefaultCastpoint takes unit whichUnit, integer index returns real
native GetUnitAttackBackswing takes unit whichUnit, integer index returns real
native GetUnitAttackCastpoint takes unit whichUnit, integer index returns real

// These also affect the speed of the attack animation.
native SetUnitAttackBackswing takes unit whichUnit, integer index, real backswing returns nothing
native SetUnitAttackCastpoint takes unit whichUnit, integer index, real castPoint returns nothing

// These deal with the generated projectile for every ranged attack launched.
type projectileevent extends eventid
type projectile extends effect

constant projectileevent EVENT_PROJECTILE_LAUNCH

// Upon hitting the target or 60 seconds (based on Nes' tests), EVENT_PROJECTILE_EXPIRE catches the moment projectile objects are to be destroyed.
constant projectileevent EVENT_PROJECTILE_EXPIRE

// Returns the generated projectile object.
constant native GetTriggerProjectile takes nothing returns projectile

// Allows additional manipulation of the projectile
native GetProjectileSpeed takes projectile whichProj returns real
native GetProjectileDamage takes projectile whichProj returns real
native GetProjectileAttackType takes projectile whichProj returns attacktype
native GetProjectileDamageType takes projectile whichProj returns damagetype
native GetProjectileWeaponType takes projectile whichProj returns weapontype
native GetProjectileTarget takes projectile whichProj returns widget
native GetProjectileTargetX takes projectile whichProj returns real
native GetProjectileTargetY takes projectile whichProj returns real
native GetProjectileTargetZ takes projectile whichProj returns real

native IsProjectileHoming takes projectile whichProj returns boolean
native IsProjectileDamageAttack takes projectile whichProj returns boolean
native GetProjectileOwner takes projectile whichProj returns unit
native GetProjectileArc takes projectile whichProj returns real

// If set to 0, the missile will hit 0-seconds after.
native SetProjectileSpeed takes projectile whichProj, real speed returns nothing
native SetProjectileDamage takes projectile whichProj, real damage returns nothing
native SetProjectileAttackType takes projectile whichProj, attacktype atkType returns nothing
native SetProjectileDamageType takes projectile whichProj, damagetype atkType returns nothing
native SetProjectileWeaponType takes projectile whichProj, weapontype atkType returns nothing
native SetProjectileTarget takes projectile whichProj, widget target returns nothing
native SetProjectileTargetX takes projectile whichProj, real x returns nothing
native SetProjectileTargetY takes projectile whichProj, real y returns nothing
native SetProjectileTargetZ takes projectile whichProj, real z returns nothing

native SetProjectileHoming takes projectile whichProj, boolean homing returns nothing
// If toAttack is true, then the damage inflicted through the projectile is considered as an attack.
native SetProjectileDamageAttack takes projectile whichProj, boolean toAttack returns nothing
native SetProjectileOwner takes projectile whichProj, unit whichUnit returns nothing
native SetProjectileArc takes projectile whichProj, real arc returns nothing

// On spell-events
constant unitevent EVENT_UNIT_SPELL_MISS

// Model related natives
// As I am not really verbose with models, these suggestions may be improved upon.

// Gets the unit's model
type geoset extends agent
type rendermodelpart extends agent

type rendermodel extends handle

native GetUnitModel takes unit whichUnit returns string
native GetUnitTextureModel takes unit whichUnit, geoset whichGeoset returns string
native GetUnitRenderModel takes unit whichUnit returns rendermodel

native SetUnitModel takes unit whichUnit, string model returns nothing
native SetUnitModelTexture takes unit whichUnit, geoset whichGeoset, string texturePath returns nothing

native GetDestructableRenderModel takes destructable whichDest returns rendermodel
native GetItemRenderModel takes destructable whichDest returns rendermodel

// Allows one to create a new animation based on these info.
native RenderModelWriteStart takes rendermodel whichModel returns nothing
// Clears all in-game generated animations from the write list, preventing them from being written upon a RenderModelWrite call.
native RenderModelClear takes rendermodel whichModel returns nothing
// Saves the changes made in-game to the model. 
native RenderModelWrite takes rendermodel whichModel returns nothing

native GetRenderModelTime takes rendermodel whichModel returns real
native SetRenderModelTimer takes rendermodel whichModel, real time returns nothing

// Gets a part, object or event based on the model's info
native GetRenderModelPart takes rendermodel whichModel, integer index returns rendermodelpart
// Localized only to the coordinates of the model
native GetRenderModelPartX takes rendermodel whichModel, rendermodelpart whichPart returns real
native GetRenderModelPartY takes rendermodel whichModel, rendermodelpart whichPart returns real
native GetRenderModelPartZ takes rendermodel whichModel, rendermodelpart whichPart returns real

native SetRenderModelPartX takes rendermodel whichModel, rendermodelpart whichPart, real x returns nothing
native SetRenderModelPartY takes rendermodel whichModel, rendermodelpart whichPart, real y returns nothing
native SetRenderModelPartZ takes rendermodel whichModel, rendermodelpart whichPart, real z returns nothing
 
Level 3
Joined
Apr 25, 2013
Messages
38
Increasing the Maximum Forces in Scenario Properties to 12 (up from 6) would be helpful and in line with the 24 player increase. Previously you could make 6 teams of 2 but to make 12 teams of 2 would require triggers.
upload_2018-12-1_2-1-59.png


Force 12 ftw!
 
Level 9
Joined
Jul 7, 2011
Messages
275
Improvement in Resistance Skin ability, to be able to control via World Editor the abilities that will become immune and reduce duration of debuffs.
Better manipulation of skills directly from Object Editor (ignoring Gameplay Constants):

Defend
Ensnare
Magic Immunes
The skills can deactivate
Can change slow values of the Frost Attack, and also can add option to slow the attack speed.
 
Level 7
Joined
Jun 5, 2018
Messages
180
Add missing natives for Stock UI (very urgent):
vJASS:
// Get the id of an item in stock by coordinates.
native GetItemInStock takes unit whichstock, integer x, integer y returns integer
// Get the x coordinate of an item in stock by id.
native GetItemXInStock takes unit whichstock, integer itemid returns integer
// Get the y coordinate of an item in stock by id.
native GetItemYInStock takes unit whichstock, integer itemid returns integer
// Change the item at the specific coordinate of stock.
native SetItemInStock takes unit whichstock, integer itemid, integer x, integer y returns nothing
// Swap the postions of items in stock.
native SwapItemInStock unit whichstock, integer x1, integer y1, integer x2, integer y2 returns nothing
// Get the icon path of an item in stock.
native GetItemIconInStock unit whichstock, integer x, integer y returns string
// Change the icon of an item in stock and returns the old icon.
native SetItemIconInStock unit whichstock, integer x, integer y, string blpname returns string
I also have a post in the Producer update: natives list thread.
 
Last edited:
Level 5
Joined
May 10, 2018
Messages
129
vJASS:
native BlzUnitHideAbility                          takes unit whichUnit, integer abilId, boolean flag returns nothing
native BlzUnitDisableAbility                       takes unit whichUnit, integer abilId, boolean flag, boolean hideUI returns nothing

Please make these two not base on count!!

Based on count:
count=1
UnitHideAbility(.,.,true)-> count--
UnitHideAbility(.,.,false)-> count++
if(count==0) unit hides its ability
else unit reveals its ability​

A earth man's thinking:
flag=true
UnitHideAbility(.,.,true)-> flag=false
UnitHideAbility(.,.,false)-> flag=true
if(flag==false) unit hides its ability
else unit reveals its ability​
 
Last edited:

Wrda

Spell Reviewer
Level 26
Joined
Nov 18, 2012
Messages
1,888
I can't comprehend what in the world you're talking about, neither it makes sense.
If you're talking about using countdown timer for this, then use it since it exists already? Instead of asking to add a timer inside the native.
 
Level 5
Joined
May 10, 2018
Messages
129
I can't comprehend what in the world you're talking about, neither it makes sense.
If you're talking about using countdown timer for this, then use it since it exists already? Instead of asking to add a timer inside the native.

What MyPad understood is what I wanted to say. They should be a simply setter funcitons, like SetPlayAbilityAvailble.

vJASS:
UnitAddAbility(hero,'A000',1)
BlzUnitHideAbility(hero,'A000',true)
BlzUnitHideAbility(hero,'A000',true)
BlzUnitHideAbility(hero,'A000',false)//this will not reveal the unit's ability, unless you do it again

vJASS:
UnitAddAbility(hero,'A000',1)
BlzUnitHideAbility(hero,'A000',false)
BlzUnitHideAbility(hero,'A000',true)//this will not hide the unit's ability,unless you do it again

Ridiculous?
 
Level 24
Joined
Feb 9, 2009
Messages
1,787
Projectile handling so that us lower serfs of the GUI world can make fancy projectiles abilities that for instance STOP projectiles like a barrier

Here's some for thought:
- Create Projectile at Point using X model, source equal to (Triggering Unit)
- Modify X projectile Projectile Damage Type
- Modify X projectile Speed
- Modify X projectile Model
- Destroy X projectile
- Remove X projectile
- Modify X projectile Damage? - ( i'm not sure if damage is stored in the projectile, but this would be neat)
- Modify X projectile Animation
- Modify X Projectile Size
- Pause X projectile
- Change X Projectiles target to X unit / Point
- Point - Position of (Last Created Projectile)
- Projectile Group (Projectiles in X range)
- Set Expiration for X Projectile
- (Last Created Projectile)
- (Last Projectile Launched) - What it says on the tin
- (Source of X projectile) - refer's to source of projectile
- (Projectile source is Spell) Boolean? and it's counter part (Physical attack)
- (Next Projectile) of (Triggering Unit) - What it says on the tin
- (Speed of X Projectile) - What it says on the tin
 

deepstrasz

Map Reviewer
Level 69
Joined
Jun 4, 2009
Messages
18,876
Not sure if this thread is only for triggers and stuff but I'm going to write that the Bronze Dragon Roost has the icon of the Red Dragon Roost.
There is not unique Nether Dragon Roost. It's the one for the Black Dragon, icon and model (soundset too?).


EDIT: also, is there no trigger to set the stock delay and replenish of mercenaries to a value?


EDIT 2: the Orc and Undead Transport ships are the same.
 
Last edited:
Level 4
Joined
Jul 8, 2015
Messages
7
I'd love being able to change whether an ability is physical, magical or universal in the object editor, and if possible, having a field for Gold/Wood Cost of using it on ALL abilities not just the Goblin Shop's Reveal.
 
Level 9
Joined
Jul 7, 2011
Messages
275
Some things you could do is to have Warcraft 3 support various levels of floors. So, I could do my Medieval Resident Evil better. I did little similar to 1, but with medievel things instead of modern things.
Ah with that implementation, you could add the camera navigation with W, S, A and D. For easy access to specific places. In Blender I use this, to see if it's correctly aligned the model.
 
Adding native support for calling functions below a line would be quite helpful. (Implemented directly by the JASS Virtual Machine)

In turn, a new annotation above a function might help out those gruesome tasks that may not reach completion without external influence.

Demo:
JASS:
function foo takes nothing returns nothing
    call bar()
endfunction

//# nooplimit
function bar takes npthing returns nothing
    local integer array I
    loop
        exitwhen I[0] >= 1048576
        set I[0] += 1
    endloop
endfunction
 
Level 5
Joined
May 10, 2018
Messages
129
Adding native support for calling functions below a line would be quite helpful. (Implemented directly by the JASS Virtual Machine)

In turn, a new annotation above a function might help out those gruesome tasks that may not reach completion without external influence.

Demo:
JASS:
function foo takes nothing returns nothing
    call bar()
endfunction

//# nooplimit
function bar takes npthing returns nothing
    local integer array I
    loop
        exitwhen I[0] >= 1048576
        set I[0] += 1
    endloop
endfunction
ExecuteFunc("bar") is not that slow, I think.
 
ExecuteFunc("bar") is not that slow, I think.

Perhaps, if looking at most practical applications thereof (GUI initialization, for example)

Reason behind suggestion is to circumvent the comparatively more costly way of emulating such a behavior, such as a forced trigger evaluation/execution or a force enumeration.

The no-oplimit notation will effectively prevent repeated virtual thread generation for a repetitive task that is anticipated to cost that much, by bypassing the op-limit with a drawback, it only applies to the function below itself.
 

deepstrasz

Map Reviewer
Level 69
Joined
Jun 4, 2009
Messages
18,876
Not a bug or anything. However, spells like Thunder Clap have a wider aggro area of effect than the zone the spell acts upon. Neutral hostile/enemy units sense Thunder Clap from a distance even if they were not hit by the spell. It's annoying in many maps. I'm not sure if this can be changed in the gameplay constants or not or if it is hard-coded.
 
Level 24
Joined
Feb 9, 2009
Messages
1,787
Custom Fonts!
Turning (error squares) ‍ into for neat floating text options or ability descriptions:
❤️❤️❤️❤️❤️❤️ - (Health Remaining)
☠️ 5% Execute chance
❄️ -10 Frost Damage
⚡️ - 14 Lightning Damage
⬆️50% crit vs ranged units
⬇️10 defense when facing - jazz musicians
✨ -36 Arcane Damage
⚓️ - Rooted
S͔̱̙e̹̘̺̞͚r̟̜͈̯͚̲̭̀io̗̫͝ͅư͈̯̟s̭͈l̴̫y̳̼̗̬̯̥ ͔̮̥͙̳̳͜ͅC҉̙͙͚r̝e҉̫e̡͈͇̜p̗̭̰y̞̥͇͈͕͠ ͈̟̖̜͔s̯̘̲̝t͡u̯ͅͅf̧͍̫͎̬f͕̫̣̤͎̭͞
 
Level 24
Joined
Feb 9, 2009
Messages
1,787
Making use of extra post, see my previous post for the silly stuff:

Suggestion - Framework for reoccurring systems of popular maps
so that simpletons of the GUI need not consult filthy knife eared elves for lessons in moon runes:

This of course is just referring to framework, the bare minimum:
  • Inventory system (Exceeding past the legendary 6 of course.)
  • Skill Tree system
  • Max unit's selected
  • Maximum number of floating texts
  • Knockback
If there's a chance to add something from the current times that appears in something as new as Diablo 3 we can make this game last even longer!

Imagine Warcraft 3 Reforged: REANIMATED in 20 years time.
 
Last edited:
Level 28
Joined
Feb 18, 2014
Messages
3,580
  • Fix the Spellbook Shared Cooldown : As it is now the Shared Cooldown works only for Level 1 of the ability.
  • AI Building Upgrades : The AI doesn't recognize custom upgraded buildings. For example if I upgrade my custom townhall to custom keep, the AI will build an extra townhall. I know there is a workaround for this nevertheless.
  • I don't know if this was already reported/fixed or not but the Pan Camera as necessary thing is known to cause desync in multiplayer.
As for the natives. I would like to request this :

JASS:
native GetUnitColor takes unit whichunit returns playercolor
 
Last edited:

deepstrasz

Map Reviewer
Level 69
Joined
Jun 4, 2009
Messages
18,876
Hey, so, I don't know if it was fixed in newer patches but you cannot make a building only be constructed on shallow water no matter what combination(s) you choose in the Placement Prevented by and Placement Requires Object Editor fields for said unit. All I can do is either make it build only on Blight, any type of water (deep and shallow), buildable (non-water) or on all (non-blight).

By the way, a manner to make Blight be placed on shallow water?

EDIT:
Give us an option to edit the targets for the Build abilities (they don't even appear in the Object Editor). For instance I'm trying to place a Haunted Gold Mine on a flying non-moving Gold Mine. Why? Because I placed the mine on water and without it flying the height field isn't considered and the mine remains underwater.
But imagine maybe I'd want to make some sort of air workers and air mines.
It works with Float though.

EDIT2:
More fields on some abilities like Return resources. For instance the Targets don't do anything. I tried to exclude organic units from bringing gold.

EDIT3:
Would be useful for a haunted mine build ability that would result in a building of the mapper's choice, not necessarily for it to be placed on a mine and for it to be a mine.
 
Last edited:
Status
Not open for further replies.
Top