WarCraft 3 World Editor 1.29 Update!

tom_mai78101

The Helper Connoisseur / Ex-MineCraft Host
Staff member
Reaction score
1,828
https://us.battle.net/forums/en/bnet/topic/20761976724#1

------------------------------

Greetings Creators,

Here's your much deserved deeper dive into the Editor improvements. Please try to keep discussion and requests in this thread so we can track more easily. Cheers.

General Limit Increases
  • Object limit increased to 30,000
  • Map size limit increased to 480 x 480
  • Tile set limit increased to 16
  • Max execution number increased to 1666666
  • Max food limit increased to 999
  • Max resource limit increased to 9999999
  • Array size increased from 8192 to 32768
  • Display mana bar


New Natives
  • DecPlayerTechResearched; takes player whichPlayer, integer techid, integer levels returns nothing // Opposite to IncPlayerTechResearched
  • DeleteHeroAbility; takes unit whichUnit, integer abilCode returns nothing // Remove Hero Ability
  • DeleteHeroAbility; takes unit whichUnit, integer abilCode returns nothing // Remove Hero Ability
  • GetAbilityCooldowntakes; integer abilId, integer level returns real
  • GetAbilityIcon; takes integer abilCode, integer level returns string
  • GetAbilityManaCosttakes; integer abilId, integer level returns integer
  • GetAbilityPosX; takes integer abilCode returns integer // Icon Position
  • GetAbilityPosY; takes integer abilCode returns integer
  • GetAbilityResearchTooltip; takes integer abilCode, integer level returns string
  • GetAbilityResearchExtendedTooltip; takes integer abilCode, integer level returns string
  • GetAbilityTooltip; takes integer abilCode, integer level returns string
  • GetAbilityExtendedTooltip; takes integer abilCode, integer level returns string
  • GetAbilityOnIcon; takes integer abilCode returns string // "OnIcon is the icon for these auto-castable ablities when they're turned on"
  • GetAbilityOnPosX; takes integer abilCode returns integer
  • GetAbilityOnPosY; takes integer abilCode returns integer
  • GetAbilityOnTooltip; takes integer abilCode, integer level returns string
  • GetAbilityOnUberTooltip; takes integer abilCode, integer level returns string
  • GetItemIconPath; takes item whichItem returns string
  • GetItemTooltip; takes item whichItem returns string
  • GetItemExtendedTooltip; takes item whichItem returns string
  • GetLocalSpecialEffectX; takes effect whichEffect returns real
  • GetLocalSpecialEffectY; takes effect whichEffect returns real
  • GetLocalSpecialEffectZ; takes effect whichEffect returns real
  • GetLocalUnitZ; takes unit whichUnit returns real
  • GetTriggerPlayerMouseButton; takes nothing returns mousebuttontype
  • GetTriggerPlayerMousePosition; takes nothing returns location
  • GetTriggerPlayerMouseX; takes nothing returns real
  • GetTriggerPlayerMouseY; takes nothing returns real
  • GetUnitAbilityCooldown; takes unit whichUnit, integer abilId, integer level returns real
  • GetUnitAbilityCooldownRemaining; takes unit whichUnit, integer abilId returns real
  • GetUnitAbilityManaCost; takes unit whichUnit, integer abilId, integer level returns integer
  • GetUnitArmor; takes unit returns real
  • GetUnitAttackCooldown; takes unit whichUnit, integer weaponIndex returns real
  • GetUnitBaseDamage; takes unit whichUnit, integer weaponIndex returns integer
  • GetUnitCollisionSize; takes unit whichUnit returns real
  • GetUnitDiceNumber; takes unit whichUnit, integer weaponIndex returns integer
  • GetUnitDiceSides; takes unit whichUnit, integer weaponIndex returns integer
  • IsUnitInvulnerable; takes unit whichUnit returns boolean
  • IsUnitSelectable; takes unit whichUnit returns boolean
  • PlaySpecialEffect; takes effect whichEffect, integer anim returns nothing
  • SetEventDamage; takes real damage returns nothing // Modify EVENT_UNIT_DAMAGED event damage
  • SetHeroProperName; takes unit whichUnit, string name returns nothing
  • SetSpecialEffectAlpha; takes effect whichEffect, integer alpha returns nothing
  • SetSpecialEffectColor; takes effect whichEffect, integer r, integer g, integer b returns nothing
  • SetSpecialEffectColorByPlayer; takes effect whichEffect, player whichPlayer returns nothing
  • SetSpecialEffectPosition; takes effect whichEffect, real x, real y, real z returns nothing
  • SetSpecialEffectPositionLoc; takes effect whichEffect, location loc returns nothing
  • SetSpecialEffectOrientation; takes effect whichEffect, real yaw, real pitch, real roll returns nothing
  • SetSpecialEffectPitch; takes effect whichEffect, real pitch returns nothing
  • SetSpecialEffectRoll; takes effect whichEffect, real roll returns nothing
  • SetSpecialEffectTime; takes effect whichEffect, real time returns nothing // Think this won't solve the leak problem
  • SetSpecialEffectTimeScale; takes effect whichEffect, real timeScale returns nothing
  • SetSpecialEffectX; takes effect whichEffect, real x returns nothing
  • SetSpecialEffectY; takes effect whichEffect, real y returns nothing
  • SetSpecialEffectYaw; takes effect whichEffect, real yaw returns nothing
  • SetSpecialEffectZ; takes effect whichEffect, real z returns nothing
  • SetUnitAbilityCooldown; takes unit whichUnit, integer abilId, integer level, real cooldown returns nothing // Set ability cooldown for this specific unit
  • SetUnitArmor; takes unit whichUnit, real armorAmount returns nothing
  • SetUnitAttackCooldown; takes unit whichUnit, real cooldown, integer weaponIndex returns nothing // Set all future attack cooldown for this specific unit
  • SetUnitBaseDamage; takes unit whichUnit, integer baseDamage, integer weaponIndex returns nothing
  • SetUnitDiceNumber; takes unit whichUnit, integer diceNumber, integer weaponIndex returns nothing
  • SetUnitDiceSides; takes unit whichUnit, integer diceSides, integer weaponIndex returns nothing
  • SetUnitName; takes unit whichUnit, string name returns nothing
  • UnitCancelTimedLife; takes unit whichUnit returns nothing
  • UnitDisableAbility; takes unit whichUnit, integer abilId, boolean flag, boolean hideUI returns nothing
  • EndUnitAbilityCooldown; takes unit whichUnit, integer abilCode returns nothing // Finish cooldown for this ability for this unit
  • UnitHideAbility; takes unit whichUnit, integer abilId, boolean flag returns nothing
  • UnitInterruptAttack; takes unit whichUnit returns nothing
 
Wow... So finally we can have maps with thousands of units, and we can access and modify object data.
 
This looks like a preparation patch for compatibility between WC3 RoC and WC3 Reforged. Excited! Wonder if I'll find time to make any maps. :)

Also: Hi! I've been gone a while. I'm an Aerospace Software Engineer now. :)
 
This looks like a preparation patch for compatibility between WC3 RoC and WC3 Reforged. Excited! Wonder if I'll find time to make any maps. :)

Also: Hi! I've been gone a while. I'm an Aerospace Software Engineer now. :)
Nice.
 
I'm looking forward to working on some maps. I never really got close to finishing any projects (mainly cause I was a kid I suppose). Can't wait, I will definitely be jumping into WC3 Reforged.
 
So I found myself on the post describing changes for 1.31 on the PTR. Here's the World Editor section:

WORLD EDITOR
DISCLAIMER: MAPS CREATED WITH PTR BUILD WILL NOT WORK ON LIVE

(Beta) Added Lua as a supported scripting language. To create a Lua map:

  1. Create a blank map
  2. Open “Scenario -> Map Options”
  3. Select “Lua” from the “Script Language” dropdown:
  • Maps save in the selected language
  • Maps that are written only in standard libraries can switch to Lua
  • Maps that use custom script will have to disable all custom triggers before conversion
(Beta) Object modification system API allows new changes to many items, abilities, units and more at run-time.

  • Maps can be saved and loaded as folders (as well as MPQs)
    • You can now manipulate the map structure very easily outside of the editor (such as adding files). In the editor go to File > Save As and then select to save the map as a directory or a MPQ. This feature coupled with auto-import allows maps to be manipulated and developed by multi-person teams more easily.
  • Loose files in a map are now auto-imported in World Editor
    • Historically, an imported file would be noted in the .imp file. Loading the map only load/save files that were stored in the import file. Auto-import loads and save files that are stored in the map folder automatically. This also makes manipulation of map files outside the editor possible.
  • Added support for many popular community created functions
  • Added Custom User Interface functions to allow map makers to add, remove, and adjust UI frames
  • When saving a map as an MPQ, the editor no longer saves file times to make maps deterministic
  • The editor now creates a backup map file on save
  • The data layout in CASC has changed, each directory with the “.w3mod” suffix acts as an overlay for the engine
  • Maps are .w3mods with a different extension (.w3m or .w3x) which allows us to support maps that contain all locales in one map
  • Folders can now be nested in the Trigger Editor
  • Globals are now part of the trigger tree, and can be put in relevant categories
  • Doodad height is now an adjustable property (Requires “Reset Fixed Object Heights” disabled)
  • When creating new objects in the object editor you are now given the option to customize it
  • Scripts can now detect when any unit is damaged
  • Scripts can now detect and modify the damage done before armor
  • Scripts can now detect and modify the attack type, damage type, and weapon type (Note, modifying these only works in the pre-armor event)
  • GroupAddUnit/GroupRemoveUnit now returns true/false if a unit was added/removed
  • More group manipulation natives (BlzGroupAddGroupFast, BlzGroupRemoveGroupFast, BlzGroupGetSize, BlzGroupUnitAt)
  • Bitwise functions (BlzBitOr, BlzBitAnd, BlzBitXor)
  • When JassHelper is enabled, it now only shows the JassHelper error dialog
  • Removed deadzone when using the editor on widescreen displays
  • Tooltip Previewer displays how text will appear in game
  • BlzSetAbilityResearchExtendedTooltip now displays the correct string
  • BlzGetLocalUnitZ now returns the correct height
  • Setting Use Custom Color to True for the waterfall doodad no longer causes a crash
  • Units given custom spellcaster icons do not crash the game client when selected
  • Certain custom models are no longer lost due to textures being relocated in the game

Some things caught my eye:
  • Scripts can now detect when any unit is damaged
  • Scripts can now detect and modify the damage done before armor
  • Scripts can now detect and modify the attack type, damage type, and weapon type (Note, modifying these only works in the pre-armor event)
Didn't really want to make a new thread just for this, but I figured a bump was reasonable.
 
It makes sense the PTR maps will not be playable when the official version comes out. I do see some quality of life changes being added.

  • When JassHelper is enabled, it now only shows the JassHelper error dialog
I wondered what that is.
 
Hm, been a while since I fired up WC3, but it seems that every instance of Set Ability Mana Cost and Set Ability Cooldown (GUI) in my maps has been broken with 1.31. Does this function now require Jass, or am I missing something?
 
SetUnitAbilityCooldown; takes unit whichUnit, integer abilId, integer level, real cooldown returns nothing // Set ability cooldown for this specific unit

Update your JASS functions. There were some changes made in the changelog.
 
SetUnitAbilityCooldown; takes unit whichUnit, integer abilId, integer level, real cooldown returns nothing // Set ability cooldown for this specific unit

Update your JASS functions. There were some changes made in the changelog.
Thanks for the reply, guess they broke a few things with the new function. I seem to have narrowed down the problem: abilities at lv1 now require a value of 0, and subsequently all ability levels are 1 less in the trigger than in the ability editor. This means I have to go back and change every trigger which uses ability level.

Don't suppose you know a fix for the problem which doesn't involve doing it all manually? Thanks!
 
Last edited:
Thanks for the reply, guess they broke a few things with the new function. I seem to have narrowed down the problem: abilities at lv1 now require a value of 0, and subsequently all ability levels are 1 less in the trigger than in the ability editor. This means I have to go back and change every trigger which uses ability level.

Don't suppose you know a fix for the problem which doesn't involve doing it all manually? Thanks!
I would definitely never know.
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • Varine Varine:
    I would be there for days, even with my camera set up slides can take a long time, and if they want perfect captures I really need to use my scanners that are professionally made for that. My camera rig works well for what it is, but for enlargements and things it's not as good.
  • Varine Varine:
    I've only had a couple clients with that so far, though. I don't have a website or anything yet though.
  • Varine Varine:
    Console repair can be worthwhile, but it's also not a thing I can do at scale in my house. I just don't have room for the equipment. I need an office that I can segregate out for archival and then electronic restoration.
  • Varine Varine:
    But in order for that to be real, I need more time, and for more time I need to work less, and to work less I need a different job, and for a different job I need more money to fall back on so that I can make enough to just pay like, rent and utilities and use my savings to find these projects
    +1
  • Varine Varine:
    Another couple years. I just need to take it slow and it'll get there.
  • jonas jonas:
    any chance to get that stolen money back?
  • jonas jonas:
    Maybe you can do console repair just as a side thing, especially if there's so much competition business might be slow. Or do you need a lot of special equipment for that?
  • jonas jonas:
    I recently bought a used sauna and the preowner told me some component is broken, I took a look and it was just a burnt fuse, really cheap to fix. I was real proud of my self since I usually have two left hands for this kinda stuff :p
  • tom_mai78101 tom_mai78101:
    I am still playing Shapez 2. What an awful thing to happen, Varine, and hopefully everything has been sorted out soon. Always use multi-factor authentication whenever you have the opportunity to do so.
    +1
  • Varine Varine:
    I think all of the money is accounted for now, and all the cards have been changed out, so I think for the most part it's taken care of now. Just need to go through and make sure all of my accounts are secured again, it's just time consuming.
  • Varine Varine:
    And yeah everything has 2 factor turned on now, or at least everything I can think of at the moment.
  • Varine Varine:
    The consoles don't need too much equipment that I don't already have. I would like to get a reflow oven, but I don't really want to buy one so I'm thinking about modifying a toaster oven I have to make something that will work for what I'm doing.
  • Varine Varine:
    I have the soldering irons and reflow and all that, but without an oven it's kind of hard to build mod chips and things like that. I made a handful of them with a hot air station, but it's a pain.
  • Varine Varine:
    The only thing I'm not really set up for is BGA rework. I've done it before a little bit, but not reliably, and that equipment is wildly expensive. You need X-rays and shit.
  • Varine Varine:
    I also have a couple 3D printers. I'm not super good with those and need to get an enclosure built, but they'll be useful for some aesthetic mods I've been thinking about. At least I can use them to do designs and then just have someone else print out the parts for me once I know they work.
  • Varine Varine:
    I also use them to make adapters for all my camera shit, but that's also an on the side thing for now. Lens adapters get really expensive.
  • Varine Varine:
    I've been trying to do some little art pieces as well, but I'm not much an engineer so they haven't gone great. I got some new things showing up to try and play with
  • Varine Varine:
    I want to build this tesserect kind of thing with mirrors, and I've been trying to make this like black hole diorama. In my head it looks really cool, but I kind of thought I could form polarizing lenses into a sphere but I tend to just destroy them every time I try.
  • Varine Varine:
    So I got a new idea, but I'm not sure how to make it work like I want without being able to get a polarizer curved. I think they are made out of PVA typically, and I thought I could just heat it up a little bit to soften the film, but that clearly isn't working. So I'm going to try a few other things, I'm thinking if I put a mirror film over the polarizing film I might get something cool. I have some polarized LED's as well, and I think if I make a central light source I can use the mirrors combined with the polarizers to make that central light APPEAR black. I have next week off so I'm going to spend some time trying to figure it out
  • Varine Varine:
    The tesserect works, at least. I just need to figure out how to be able to assemble it, but I think I have a pretty good idea of how to go about it. Or at least a prototype of it. I'll post some pictures next week
  • jonas jonas:
    That last bit sounds like the last entry in a scientist's journal in a destroyed research facility in a post-apocalyptic video game
  • Varine Varine:
    lol it's not that exciting
  • Varine Varine:
    Shiny tho
  • Varine Varine:
    Basically it's a cube with a two way mirror on the inside, and then a smaller cube suspended in that with a mirrors on the outside of it. Kind of like those infinity pictures where they use two mirrors to go forever. Only it's twelve mirrors
  • Varine Varine:
    And the tiniest LED strip I could find

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top