1. The 30th edition of the Modeling Contest is finally up! The Portable Buildings need your attention, so come along and have a blast!
    Dismiss Notice
  2. The Aftermath has been revealed for the 19th Terraining Contest! Be sure to check out the Results and see what came out of it.
    Dismiss Notice
  3. Melee Mapping Contest #3 - Results are out! Congratulate the winners and check plenty of new 4v4 melee maps designed for this competition!
    Dismiss Notice
  4. The winners of our cinematic soundtrack competition have been decided! Step by the Music Contest #11 - Results to check the entries and congratulate the winners!
    Dismiss Notice

[Feedback] Request Features for JASS and the World Editor

Discussion in 'Patch Discussion' started by TriggerHappy, Aug 23, 2018.

  1. TriggerHappy

    TriggerHappy

    Code Moderator

    Joined:
    Jun 23, 2007
    Messages:
    3,545
    Resources:
    22
    Spells:
    11
    Tutorials:
    2
    JASS:
    9
    Resources:
    22
    This thread will be keeping track of the features that THW users want implemented for modding. The old thread is getting outdated and unorganized.

    The way it will work is:
    • You submit an idea for JASS or the World Editor by replying with as much information as you can about the idea.
    • If it's reasonable then a moderator will add it to the "Open Requests" section.
    • Blizzard will periodically look through the list and if they plan to implement a feature it will be added to the "In Progress" section. However if they do not it will be added the "Closed" section with a reason as to why it wont be implemented.
    • Features that have been implemented will be moved to the "Implemented" section under the patch it was added.
    If you support an idea someone else already requested, simply reply saying so and with any additional information for the request you can think of.



    Implemented

    Features

    1. Patch 1.30
      • Added support for vJass with JassHelper
      • Most buffs/debuffs can simultaneously apply to the same unit if their ID’s are different.
      • 4 new natives.
    2. Patch 1.29
      • 24 Player Support
      • World Editor Limits Increase
      • ~90 Natives (including mouse support)
      • Support for BLPs with dimensions higher than 512x512.
    3. Patch 1.27b
      • Raised file size limit from 8mb to 128mb.


    In Progress

    Features



    Open Requests

    Features
    General
    1. The ability to create custom soundsets for units. (Post, Post)
    2. Increase tooltip length for items. (Post)
    3. Re-implement tree occlusion which was present in RoC 1.0. (Post)
    4. More control over unit collision. (Post)
    5. Heroes with more than 5 abilities. (Post)
    6. Allow configuration of aura update intervals. (Post)
    7. Improved crash/error logs for custom maps, including for desyncs. (Post).
    8. Copy & Paste doodads without resetting their height. (Post)
    9. Multiple instances of the World Editor. (Post)
    10. Ability to add custom races. (Post)
    11. Allow dynamic collision. (Post)
    12. Support for .ogg audio files. (Post)

    Trigger Editor
    1. Add GUI actions for handle destructors (RemoveLocation, DestroyGroup ect..).
    2. Add locust and other missing abilities/orders to the trigger list in GUI. (Post, Post, Post, Post)
    3. Syntax Highlighting (for JASS). (Post)

    AI
    1. Increase flexibility of captain widgets. (Post)
    2. Fix basic common.j functions for AI scripts. (Post)
    3. Custom base layout offsets. (Post)

    JASS
    1. code array
      support for JASS. (Post, Post)
    2. Apply individual locust properties to units through JASS natives. (Post)
    3. Ability to show, hide, create, and manipulate UI elements. (Post)
    4. Keyboard/Input API for more than just the escape and arrow keys. (Post)
    5. Access to pathing functions. (Post)


    Closed

    Features

     
    Last edited: Aug 30, 2018
  2. deepstrasz

    deepstrasz

    Map Reviewer

    Joined:
    Jun 4, 2009
    Messages:
    8,311
    Resources:
    1
    Maps:
    1
    Resources:
    1
    I'm not gonna rewrite what I did on that thread. I hope you people had the decency to collect the information from there.
     
  3. Rufus

    Rufus

    Joined:
    Oct 2, 2011
    Messages:
    2,498
    Resources:
    7
    Maps:
    5
    Tutorials:
    2
    Resources:
    7
    My heart desire these natives:
    From here: Producer Update: Natives List
    I'd be excited for every single thing implemented from that list. :)
     
    Last edited: Aug 23, 2018
  4. Chaosy

    Chaosy

    Joined:
    Jun 9, 2011
    Messages:
    10,500
    Resources:
    17
    Maps:
    1
    Spells:
    10
    Tutorials:
    6
    Resources:
    17
    I want the ability to hide/show certain parts of the UI, moving parts around would be a +.
    Was possible with memory hack
     
  5. TriggerHappy

    TriggerHappy

    Code Moderator

    Joined:
    Jun 23, 2007
    Messages:
    3,545
    Resources:
    22
    Spells:
    11
    Tutorials:
    2
    JASS:
    9
    Resources:
    22
    Working on going through the last few months.

    I agree. I'll add it to the list.

    All Blizzard has to do is follow what Netease did over in China.

    【暴雪API】最新API发布!-魔兽争霸官方对战平台

    Code (vJASS):
    //gui
    /////////////////////////////// 原生UI修改
    //隐藏界面元素
    native DzFrameHideInterface takes nothing returns nothing
    //修改游戏世界窗口位置
    native DzFrameEditBlackBorders takes real upperHeight, real bottomHeight returns nothing
    //头像
    native DzFrameGetPortrait takes nothing returns integer
    //小地图
    native DzFrameGetMinimap takes nothing returns integer
    //技能按钮
    native DzFrameGetCommandBarButton takes integer row, integer column returns integer
    //英雄按钮
    native DzFrameGetHeroBarButton takes integer buttonId returns integer
    //英雄血条
    native DzFrameGetHeroHPBar takes integer buttonId returns integer
    //英雄蓝条
    native DzFrameGetHeroManaBar takes integer buttonId returns integer
    //道具按钮
    native DzFrameGetItemBarButton takes integer buttonId returns integer
    //小地图按钮
    native DzFrameGetMinimapButton takes integer buttonId returns integer
    //左上菜单按钮
    native DzFrameGetUpperButtonBarButton takes integer buttonId returns integer
    //鼠标提示
    native DzFrameGetTooltip takes nothing returns integer
    //聊天信息
    native DzFrameGetChatMessage takes nothing returns integer
    //unit message
    native DzFrameGetUnitMessage takes nothing returns integer
    //top message
    native DzFrameGetTopMessage takes nothing returns integer
    //获取game ui
    native DzGetGameUI takes nothing returns integer
    /////////////////////////////// 自定义UI
    //取rgba色值
    native DzGetColor takes integer r, integer g, integer b, integer a returns integer
    //设置界面更新回调(非同步)
    native DzFrameSetUpdateCallback takes string func returns nothing
    //显示/隐藏Frame
    native DzFrameShow takes integer frame, boolean enable returns nothing
    //创建frame
    native DzCreateFrame takes string frame, integer parent, integer id returns integer
    //创建SimpleFrame
    native DzCreateSimpleFrame takes string frame, integer parent, integer id returns integer
    //销毁frame
    native DzDestroyFrame takes integer frame returns nothing
    //加载toc
    native DzLoadToc takes string fileName returns nothing
    //设置frame相对位置
    native DzFrameSetPoint takes integer frame, integer point, integer relativeFrame, integer relativePoint, real x, real y returns nothing
    //设置frame绝对位置
    native DzFrameSetAbsolutePoint takes integer frame, integer point, real x, real y returns nothing
    //清空frame锚点
    native DzFrameClearAllPoints takes integer frame returns nothing
    //设置frame禁用/启用
    native DzFrameSetEnable takes integer name, boolean enable returns nothing
    //注册UI事件回调
    native DzFrameSetScript takes integer frame, integer eventId, string func, boolean sync returns nothing
    //获取触发ui的玩家
    native DzGetTriggerUIEventPlayer takes nothing returns player
    //查找frame
    native DzFrameFindByName takes string name, integer id returns integer
    //查找SimpleFrame
    native DzSimpleFrameFindByName takes string name, integer id returns integer
    //查找String
    native DzSimpleFontStringFindByName takes string name, integer id returns integer
    //查找Texture
    native DzSimpleTextureFindByName takes string name, integer id returns integer
    //点击frame
    native DzClickFrame takes integer frame returns nothing
    //自定义屏幕比例
    native DzSetCustomFovFix takes real value returns nothing
    //使用宽屏模式
    native DzEnableWideScreen takes boolean enable returns nothing
    //设置文字(支持EditBox, TextFrame, TextArea, SimpleFontString、GlueEditBoxWar3、SlashChatBox、TimerTextFrame、TextButtonFrame、GlueTextButton)
    native DzFrameSetText takes integer frame, string text returns nothing
    //获取文字(支持EditBox, TextFrame, TextArea, SimpleFontString)
    native DzFrameGetText takes integer frame returns string
    //设置字数限制(支持EditBox)
    native DzFrameSetTextSizeLimit takes integer frame, integer size returns nothing
    //获取字数限制(支持EditBox)
    native DzFrameGetTextSizeLimit takes integer frame returns integer
    //设置文字颜色(支持TextFrame, EditBox)
    native DzFrameSetTextColor takes integer frame, integer color returns nothing
    //获取鼠标所在位置的ui控件指针
    native DzGetMouseFocus takes nothing returns integer
    //设置所有锚点到目标frame上
    native DzFrameSetAllPoints takes integer frame, integer relativeFrame returns boolean
    //设置焦点
    native DzFrameSetFocus takes integer frame, boolean enable returns boolean
    //设置模型(支持Sprite、Model、StatusBar)
    native DzFrameSetModel takes integer frame, string modelFile, integer modelType, integer flag returns nothing
    //获取控件是否启用
    native DzFrameGetEnable takes integer frame returns boolean
    //设置透明度(0-255)
    native DzFrameSetAlpha takes integer frame, integer alpha returns nothing
    //获取透明度
    native DzFrameGetAlpha takes integer frame returns integer
    //设置动画
    native DzFrameSetAnimate takes integer frame, integer animId, boolean autocast returns nothing
    //设置动画进度(autocast为false是可用)
    native DzFrameSetAnimateOffset takes integer frame, real offset returns nothing
    //设置texture(支持Backdrop、SimpleStatusBar)
    native DzFrameSetTexture takes integer frame, string texture, integer flag returns nothing
    //设置缩放
    native DzFrameSetScale takes integer frame, real scale returns nothing
    //设置tooltip
    native DzFrameSetTooltip takes integer frame, integer tooltip returns nothing
    //鼠标限制在ui内
    native DzFrameCageMouse takes integer frame, boolean enable returns nothing
    //获取当前值(支持Slider、SimpleStatusBar、StatusBar)
    native DzFrameGetValue takes integer frame returns real
    //设置最大最小值(支持Slider、SimpleStatusBar、StatusBar)
    native DzFrameSetMinMaxValue takes integer frame, real minValue, real maxValue returns nothing
    //设置Step值(支持Slider)
    native DzFrameSetStepValue takes integer frame, real step returns nothing
    //设置当前值(支持Slider、SimpleStatusBar、StatusBar)
    native DzFrameSetValue takes integer frame, real value returns nothing
    //设置frame大小
    native DzFrameSetSize takes integer frame, real w, real h returns nothing
    //根据tag创建frame
    native DzCreateFrameByTagName takes string frameType, string name, integer parent, string template, integer id returns integer
    //设置颜色(支持SimpleStatusBar)
    native DzFrameSetVertexColor takes integer frame, integer color returns nothing
    /*
    DzFrameSetPoint achor定义,从0开始
    enum class AnchorPoint
    {
        TOPLEFT = 0,
        TOP = 1,
        TOPRIGHT = 2,
        LEFT = 3,
        CENTER = 4,
        RIGHT = 5,
        BOTTOMLEFT = 6,
        BOTTOM = 7,
        BOTTOMRIGHT = 8,
    };
    DzFrameSetScript  注册ui事件的事件ID
    enum class CFrameEvents
    {
        NONE = 0,
        FRAME_EVENT_PRESSED = 1,
        FRAME_MOUSE_ENTER = 2,
        FRAME_MOUSE_LEAVE = 3,
        FRAME_MOUSE_UP = 4,
        FRAME_MOUSE_DOWN = 5,
        FRAME_MOUSE_WHEEL = 6,
        FRAME_FOCUS_ENTER = FRAME_MOUSE_ENTER,
        FRAME_FOCUS_LEAVE = FRAME_MOUSE_LEAVE,
        FRAME_CHECKBOX_CHECKED = 7,
        FRAME_CHECKBOX_UNCHECKED = 8,
        FRAME_EDITBOX_TEXT_CHANGED = 9,
        FRAME_POPUPMENU_ITEM_CHANGE_START = 10,
        FRAME_POPUPMENU_ITEM_CHANGED = 11,
        FRAME_MOUSE_DOUBLECLICK = 12,
        FRAME_SPRITE_ANIM_UPDATE = 13,
    };
    */
     
  6. Sir Moriarty

    Sir Moriarty

    Spell Reviewer

    Joined:
    Jun 13, 2016
    Messages:
    279
    Resources:
    2
    Spells:
    1
    Tutorials:
    1
    Resources:
    2
    Not directly about to World Editor, but highly relevant to map development: allow multiple WC3 instances to connect to LAN from the same machine. Crucial for testing code for desyncs and other MP-only issues.

    Also, take a look at this post I made a while ago:

    Producer Update: Natives List

    Maybe not the 'byte buffer' proposition, but not having bitwise functions is inane in this day and age. Re-implementing them in JASS is possible but the final implementions are very slow. Useful for many different things, especially in libraries.

    Needs better functionality for persisting data still. At least being able read/write line-by-line from files instead of this Preload junk.

    Re-interpreting type casts - e.g. re-interpreting a real as an int and vice-versa. Talking about raw memory representations without any conversion logic. Useful for save/load serializers.

    Better hashing function, which is case sensitive and treats all characters separately. Even something as simple as CRC32 would be great. Useful everywhere since the StringHash function is prone to collisions.

    Byte to Char and Char to Byte cast functions. Currently requires lookup tables to implement, which is slower than directly re-interpreting a string byte as an int. Old solutions also don't work for non-ASCII characters.

    Native to get any object data field. TriggerHappy recently discovered a way to do this using extended tooltips, but it only works for a handful of fields.

    Some form of "String Builder" or "String Buffer" or some other kind of native type to be able to build/modify strings without polluting the memory with intermediate products. This is really severe - trying to produce about 1 MB worth of Base64 encoded data takes up about 800 MB of intermediate string products in result. Useful for save/load.

    Some form of dynamic allocation. Native structs, or dynamic array type, or whatever. Useful for everything.

    More robust code reference type and natives to go along with it. Code arrays, ability to call code callbacks directly, etc. Passing arguments can be implemented with a stack, like ArgPushString, etc.

    Ability to change font size in main display area.

    Ability to hide/show player messages with triggers.

    Ability to scale units/sfx in each individual axis direction, instead of just by size.

    More than 16 terrain tiles per map (terrainers cry each time).

    Ability to override unit color with rgb values vs using one of the pre-defined 25 playercolors.

    CursorToMapPos function. Will be very useful for UIs and synergize with mouse natives very well.

    Native to write to game log.

    Dynamically change the model of a unit. This is already possible using some weird hacks, but should just be a native instead.

    Fix SyncStoredString.

    I think that's enough for now :)

    If at least some of these get implemented, I'll be a happy man.
     
  7. LeP

    LeP

    Joined:
    Feb 13, 2008
    Messages:
    414
    Resources:
    0
    Resources:
    0
    code arrays and a fast way to call them
    fast binary operators.
     
  8. Chaosy

    Chaosy

    Joined:
    Jun 9, 2011
    Messages:
    10,500
    Resources:
    17
    Maps:
    1
    Spells:
    10
    Tutorials:
    6
    Resources:
    17
    Oh, 2d arrays would be interesting.
     
  9. Frotty

    Frotty

    Wurst Reviewer

    Joined:
    Jan 1, 2009
    Messages:
    1,369
    Resources:
    10
    Models:
    3
    Tools:
    1
    Maps:
    4
    Tutorials:
    1
    Wurst:
    1
    Resources:
    10
    +1 code arrays

    * get screen mouse pos (terrain pos was added, which can be unprojected, but it's tedious)
     
  10. Kyrbi0

    Kyrbi0

    Joined:
    Jul 29, 2008
    Messages:
    7,648
    Resources:
    1
    Models:
    1
    Resources:
    1
    This is a great thread; I don't care much for coding but I'm a huge fan of organization.

    Question: I just noticed it's not just for JASS for also "the World Editor"... What kind of things are we allowed to suggest here? I mean there's that "Patch Wishlist" thread as well... But I have been compiling a list of Object Editor issues I would love to see addressed over time.
     
  11. TriggerHappy

    TriggerHappy

    Code Moderator

    Joined:
    Jun 23, 2007
    Messages:
    3,545
    Resources:
    22
    Spells:
    11
    Tutorials:
    2
    JASS:
    9
    Resources:
    22
    Agreed, will add to the list.

    Not to mention we need asynchronous mouse natives to properly make a smooth camera system. You don't want latency to affect camera movement. I suppose both synchronous and asynchronous natives should be implemented?

    I'm still working on the organization. I think I might separate the JASS requests in the "Open" section. I may also have to create pastebin entries for longer posts which suggest multiple ideas so I the relevant text will be obvious when linking.

    The Object Editor is part of the World Editor so you can give feedback for it here. If someone wants to make/manage a new thread for general gameplay improvements which aren't necessarily related to modding (balance, widescreen, fixes ect..) then they can do that.

    I think they are planning on this. We can already execute two instances in 1.30. Let's see if we can get any official word about it.

    It will take me some time to go through your post and add each suggestion with links and information. I know others suggested similar things so I'll have to find their posts.

    I suppose, but would it just be bonus syntax for something we can already do with vJass. I don't imagine it providing much benefit for the time it would take to implement.
     
  12. Kyrbi0

    Kyrbi0

    Joined:
    Jul 29, 2008
    Messages:
    7,648
    Resources:
    1
    Models:
    1
    Resources:
    1
    No, it's definitely related to modding; straight-up Object Editor concerns (y'know, like abilities that have wonky targetting restrictions, or misnamed fields, or hidden behaviors that mess things up, hardcoded nonsense, etc).

    I have a few reasons to want to make a separate topic, but at the same time we don't want too many threads for Blizzard devs to have to go through... Hmm. I'll ponder it.
     
  13. Chaosy

    Chaosy

    Joined:
    Jun 9, 2011
    Messages:
    10,500
    Resources:
    17
    Maps:
    1
    Spells:
    10
    Tutorials:
    6
    Resources:
    17
    You think? vjass implemented 2d arrays, though with some restrictions which limits the use a lot.
    But maybe you are right, to me it just feels like a natural thing to have in a coding language.
     
  14. Death Adder

    Death Adder

    Joined:
    Nov 3, 2013
    Messages:
    821
    Resources:
    0
    Resources:
    0
    Currently, you can change the team color on units, but there's no way to change the color on the minimap. e.g. if you change the color of Blue player's units to Red, they'll still be blue on the minimap since they're owned by the Blue player.

    So in essence, what I want is the ability to change player colors, both for specific units, but it would also be nice to be able to just have multiple players that have the same color.


    Atm there's no way make teams of a single color, e.g. team Red, Green, and Blue, where every player in the same team would have one the respective player colors.

    Or changing player colors locally, like if you wanted to make a custom "display allay colors" setting for example. If there's two or more enemy factions, you might want to be able to differentiate between them instead of seeing all enemies as red, but at the same time there's no need to know their specific player color either.


    It would also be useful for maps where you assign one or more computer AI player(s) to each user player, castle fight-esque maps (though castle fight actually has you own the spawned units), survival chaos, stronghold, etc.
     
  15. apsyll

    apsyll

    Joined:
    Aug 28, 2015
    Messages:
    176
    Resources:
    1
    Maps:
    1
    Resources:
    1
    Make the Chanell ability autocastable with custom toggle on and toggle off order strings.
     
  16. Radicool

    Radicool

    Joined:
    Mar 27, 2011
    Messages:
    1,152
    Resources:
    4
    Maps:
    4
    Resources:
    4
    I'd like to see support for the .ogg audio file format. Warcraft 3 got a new sound engine. I wonder if it'd be much work to get it supported?

    Main Reason for request: [Import] - Warcraft 3 Audio Formats

    Also:
    - .ogg is free and open source
    - .ogg generally sounds better than .mp3

    If this happened, it'd also be cool if sounds via triggers could be played via .ogg (instead of only .wav). Currently I use a trick and rename .mp3 files to .wav files, but this might not be applicable if using .ogg lol
     
  17. Nowow

    Nowow

    Joined:
    Jun 15, 2016
    Messages:
    404
    Resources:
    2
    Tutorials:
    2
    Resources:
    2
    I'd like to request additional functionalities/native functions for the AI. There are several possible quality of life improvements which I believe can be done without breaking current scripts:

    1. Increase flexibility of captain widgets (already thoroughly explained in this post).

    2. Fix basic common.j functions for AI scripts: for example natives such as
    I2S
    , and natives for special effects cause maps to crash during loading time (both functionalities are needed for debugging purposes and require hacky workarounds). By the way, one good thing to say for patch 1.30 is that crashes from a faulty AI script will now generate an error message as opposed to previous patches.

    3. AFAIK, pathing is still not solved, and some of hive's best and brightest tried implementing custom pathing detections, and failed mostly due to performance issues. A built-in pathing function will also be very helpful as an AI function, as unpathable routes cause a unwanted and unexpected behavior for AI captains. Two prime examples are attack captains getting stuck due to unpathable goal, and in case a map is initialized with player units separated by unpathable terrain (i.e. they can't reach each other), an arbitrary location is selected for the defense captain (since all non-worker units are automatically assigned to the defense captain). Something like this should probably do the trick:
    Code (vJASS):

    native PathExists takes real x1, real y1, real x2, real y2, [possible additional flags] returns boolean
    // This function should check if there exists a path on the ground between point (x1,y1) and point (x2, y2).
    // Possible additional boolean flags for water pathing/air pathing/unit blocking/doodad blocking etc.
     


    Along with adding it to attack functions such as
    CommonSuicideOnPlayer
    in order to check possible pathing problems.

    4. Custom base layout: I'm pretty sure the AI uses a predefined "map" of offsets from the starting location/town hall to build bases, having a function to access this offset map will allow creating smarter/predefined bases for the AI.
     
  18. Fluffy

    Fluffy

    Joined:
    Aug 10, 2016
    Messages:
    20
    Resources:
    0
    Resources:
    0
    Remove WE limits on objects and add syntax highlighting.
     
  19. Akolyt0r

    Akolyt0r

    Joined:
    Dec 20, 2008
    Messages:
    53
    Resources:
    3
    Icons:
    3
    Resources:
    3
    Object Editor: Export/Import of object data: Exporting and Importing of single, multiple or all objects of a specific category
    Jass: Add trigger for detecting gold/lumber trades and add native to set the trade increments (which is gameplay constant currently).
     
  20. WeirdEditor

    WeirdEditor

    Joined:
    May 10, 2018
    Messages:
    66
    Resources:
    0
    Resources:
    0
    We want a damage detection system/ or just give us a way to trace attack damage.