1. Awaken what lies in the heart of your swarm. The 17th Techtree Contest has arrived!
    Dismiss Notice
  2. The Hive Workshop is launching its first HD modelling contest. How HD should it be?
    Dismiss Notice
  3. Check out the Staff Job Openings thread.
    Dismiss Notice
Dismiss Notice
Hive 3 Remoosed BETA - NOW LIVE. Go check it out at BETA Hive Workshop! Post your feedback in this new forum BETA Feedback.
Dismiss Notice
60,000 passwords have been reset on July 8, 2019. If you cannot login, read this.

[Feedback] Request Features for JASS and the World Editor

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

  1. Barade

    Barade

    Joined:
    Feb 2, 2006
    Messages:
    749
    Resources:
    1
    Maps:
    1
    Resources:
    1
    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:
      Code (vJASS):

      call BlzSetItemIconPath( GetLastCreatedItem(), "xxx" )
       

      but there is only the string field
      Code (vJASS):
      ITEM_SF_MODEL_USED
      . The icon path field is missing.
    Missing fields in general:
    • Allow us to get all abilities of units and items:
      Code (vJASS):

      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:
    • Code (vJASS):
      native SetGameplayConstant takes gameplayconstant g, real/integer/string/boolean value returns nothing
    • Code (vJASS):
      native GetGameplayConstant takes gameplayconstant g returns real/integer/string/boolean
    • Code (vJASS):
      native SetUserInterfaceConfig takes userinterfaceconfig g, real/integer/string/boolean value returns nothing
    • Code (vJASS):
      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:
    • Code (vJASS):
      native SetWidgetPathingZ takes widget whichWidget, integer z returns nothing
    • Code (vJASS):
      native GetWidgetPathingZ takes widget whichWidget returns integer
    • Code (vJASS):
      native SetTerrainPathingZ takes real x, real y, integer z, pathingtype t, boolean flag returns nothing
    • Code (vJASS):
      native GetTerrainPathingZ takes real x, real y, integer z, pathingtype t returns boolean
    • Code (vJASS):
      native SetCustomPathingMap takes string file, integer z returns nothing
    • Code (vJASS):
      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:
      Code (vJASS):

      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:
      Code (vJASS):

      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:
    • Code (vJASS):
      native GetReceivingPlayers takes nothing returns force
      - returns all players who can read the message chatted by a player. Works together with the chat event.
    • Code (vJASS):
      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.
    • Code (vJASS):
      native HideChatMessage takes nothing returns nothing
      - Hide the entered chat message.
    Multiboard natives:
    • Code (vJASS):
      TriggerRegisterMultiboardMinimizeEvent takes trigger whichTrigger returns event
      - Triggers when a multiboard is minimized or maximized. This is probably possible with the new custom frame natives.
    • Code (vJASS):
      GetTriggerMultiboard()
    Timed life natives:
    • Code (vJASS):
      native GetUnitTimedLife takes unit whichUnit returns real
      Returns the current value of timed life for a unit.
    • Code (vJASS):
      native GetUnitTimeLifeTotal takes unit whichUnit returns real
      Returns the total value of timed life for a unit.
    • Code (vJASS):
      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: Feb 11, 2021
  2. loktar

    loktar

    Model Reviewer

    Joined:
    Nov 2, 2004
    Messages:
    1,684
    Resources:
    52
    Models:
    25
    Icons:
    20
    Packs:
    1
    Tools:
    3
    Spells:
    2
    Tutorials:
    1
    Resources:
    52
    • 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
     
  3. DracoL1ch

    DracoL1ch

    Joined:
    Dec 12, 2010
    Messages:
    2,045
    Resources:
    2
    Tutorials:
    2
    Resources:
    2
    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
     
  4. Barade

    Barade

    Joined:
    Feb 2, 2006
    Messages:
    749
    Resources:
    1
    Maps:
    1
    Resources:
    1
    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.
     
  5. Null

    Null

    Joined:
    Dec 3, 2018
    Messages:
    579
    Resources:
    51
    Icons:
    51
    Resources:
    51
    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)
     
  6. Barade

    Barade

    Joined:
    Feb 2, 2006
    Messages:
    749
    Resources:
    1
    Maps:
    1
    Resources:
    1
    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.

    edit:
    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.

    edit2:
    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!
     
    Last edited: Feb 28, 2021