• 🏆 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] Compiled List of 1.30 / 1.29 Bugs & Issues

Status
Not open for further replies.
For the resolution again:
As yo ucan see the game does not fit my screen, which is 1366x768. This does not look normal to me.

111.jpg
22222.jpg
33333.jpg

 
Level 18
Joined
Nov 21, 2012
Messages
835
About SetUnitMaxHP SetUnitMaxMana: The current hp/mana is not updated respectively to the new max hp or mana. It supposed to work like items (Khadgars Gem of Health or Pendant of mana).For example unit with hp 250/500 after calling SetUnitMaxHP(u, 1000) should have hp: 500/1000 but it has 250/1000. The same with negative values.

Applying negative max mana does not stop on zero. Max mana can drop to negative values. I tested this by call SetUnitMaxMana(udg_tempU, GetUnitMaxMana(udg_tempU) - 100) by typing message in game.
UI is not updated when mana drops to negative (until re-selection). After that, increasing max mana to value>0 also won't update UI (until re-selection).
 
Level 13
Joined
Oct 18, 2013
Messages
690
About SetUnitMaxHP SetUnitMaxMana: The current hp/mana is not updated respectively to the new max hp or mana. It supposed to work like items (Khadgars Gem of Health or Pendant of mana).For example unit with hp 250/500 after calling SetUnitMaxHP(u, 1000) should have hp: 500/1000 but it has 250/1000. The same with negative values.

Applying negative max mana does not stop on zero. Max mana can drop to negative values.
..UI is not updated when mana drops to negative (until re-selection). After that, increasing max mana to value>0 also won't update UI (until re-selection).
Code:
//for % current life staying the same after adding Life Modifiers, just use this:

globals
real array LifePerc
real array ManaPerc
endglobals

function SaveStatus takes unit u, index i returns nothing
set LifePerc[i]= LifePercent(u)
set ManaPerc[i]= ManaPercent(u)
endfunction

function LoadStatus takes unit u, index i returns nothing
call SetLifePercent(u,LifePerc[i])
call SetManaPercent(u,ManaPerc[i])
endfunction


function AddMaxHP takes index i, real r returns nothing
call SaveStatus(Unitindexer[i],i)
call SetUnitMaxHP(Unitindexer[i],GetMaxHP(Unitindexer[i])+r)
call LoadStatus(Unitindexer[i],i)
endfunction
 
Last edited:
Level 2
Joined
Aug 10, 2016
Messages
20
Some natives like UnitHideAbility + UnitShowAbility work strange, because if we used UnitHideAbility (for example) twice, we should use UnitShowAbility twice. These functions have their counters and it's a bad thing, which should be fixed to my mind.
 
Level 14
Joined
Jan 8, 2015
Messages
424
Other little thing that isnt nessesarily 1.29's issue but was issue for quite a while.......specificly hotkeys and binds that vary from various localazation to another.....its especially annoying when i play maps that use qwerty line for all spells or use R which is occupied for Move in polish version of the game. Seeing some hot key or controls menu with option to force English version binds would be nice not in 1.29 because you have enough work already xd but maybe for 1.29.1 :v
 

Deleted member 219079

D

Deleted member 219079

Other little thing that isnt nessesarily 1.29's issue but was issue for quite a while.......specificly hotkeys and binds that vary from various localazation to another.....its especially annoying when i play maps that use qwerty line for all spells or use R which is occupied for Move in polish version of the game. Seeing some hot key or controls menu with option to force English version binds would be nice not in 1.29 because you have enough work already xd but maybe for 1.29.1 :v
Omg yeah, same with German locale.
 

Natives



Some weird stuff with the natives...

I would like to point out the following native/s: (For now, I can only give out one)

JASS:
1.) native SetEventDamage takes real r returns nothing

I tested the following native/s above through a wrapper function (I preferred class-like syntax) and derived what I think is its' implementation.

Code:
[s]
float dmgInternal;
float dmgActual;

1. native SetEventDamage
    // Upon further testing, I found out that Setting damage does not work.. it defaults to 0.

void SetEventDamage(real r) {
    if !(dmgInternal == 0f) {
        dmgActual = 0f;
    }
    else {
        // Don't know what to put here.
    }
}
[/s]

//    SetEventDamage working as intended. Wrapper function always wrote 0 instead of the requested real).

As can be inferred from above (ignoring possible syntax errors in pseudo-code), the following behavior of the natives are as follows:

JASS:
[s]
1.) native SetEventDamage(real r)
    set dmgInternal = r
[/s]

Possible solution/s:

You can implement the native/s as such, making it behave as its' name implies, (Note: pseudocode)

Code:
[s]
1.)
float dmgInternal;
float dmgActual;

void SetEventDamage(real r) {
    dmgActual = r
}
[/s]

Some natives like UnitHideAbility + UnitShowAbility work strange, because if we used UnitHideAbility (for example) twice, we should use UnitShowAbility twice. These functions have their counters and it's a bad thing, which should be fixed to my mind.

I think that kind of behavior is already intended, and would make sense in the game. Suppose you were silenced twice from two sources. When you call UnitUnsilence or something, it should not immediately reset the silence counter. Think of silences as stacking.


EDIT:

Updated the investigation of the first native. Result now is expected to be accurate.

Game




1.)
upload_2018-2-26_21-24-31.png


An erroneous error message?! (Caused by syntax errors in the map script; invalid variable assignment (dmg_a[this] = real 0., when dmg_a[this] should be damage_a[this]))
 
Last edited:
Am I the only one here who see Light Blue (10) and Teal (3) having the exact same color ?

You are not the only one, fellow Hiver. As I was playing DotA, I confused the enemy's Luna Moonfang as an ally of mine, although the targeting mechanism suggests otherwise. If you look closely, you can notice a slight disparity in contrast between them.
 
Level 2
Joined
Aug 10, 2016
Messages
20

Natives


I think that kind of behavior is already intended, and would make sense in the game. Suppose you were silenced twice from two sources. When you call UnitUnsilence or something, it should not immediately reset the silence counter. Think of silences as stacking.

Stacking is a good thing, but we also need some functions for despell. Thats why we should know values of the functions' counters. For example:
JASS:
    native GetUnitHideAbilityCounter takes unit whichUnit, integer abilityId returns integer
One function (UnitHideAbility) should increase counter, but another one (UnitShowAbility) should decrease it. But this system of stacking is labour-intensive, because functions like this will be needed.
JASS:
    native SetUntHideAbilityCounter takes unit whichUnit, integer abilityId returns nothing
Despell will look like this. It's rather uncomfortable.
JASS:
function DespellUnit takes unit whichUnit, integer abilityId returns nothing
    local integer counter = GetUnitHideAbilityCounter(whichUnit,abilityId)
    local integer i = 0
    loop
        exitwhen i >= counter
        call UnitShowAbility(whichUnit,abilityId)
        i = i + 1
    endloop
endfunction
// It's easier to have function like this...
    native UnitShowAbilityImmediately takes unit whichUnit, integer abilityId returns nothing
Yeah, we also need an opporunity to get lists of units' abilities with functions for their data processing.
 
Last edited:
Stacking is a good thing, but we also need some functions for despell. Thats why we should know values of the functions' counters. For example:
JASS:
    native GetUnitHideAbilityCounter takes unit whichUnit, integer abilityId returns integer
One function (UnitHideAbility) should increase counter, but another one (UnitShowAbility) should decrease it. But this system of stacking is labour-intensive, because functions like this will be needed.
JASS:
    native SetUntHideAbilityCounter takes unit whichUnit, integer abilityId returns nothing

That could be one of the more useful natives all-around (The setter). However, since we only have a few spells that affect the counter directly, and there can be no more than 4 stacking silence counters in a practical game, I would say it wouldn't hurt not including that, since it behaves more of a wrapper function than an appropriate native.
 
Level 3
Joined
Apr 25, 2013
Messages
38
When I try opening my map, Warcraft: Total War, as is in the editor crashes. When I wipe all the triggers and preplaced units I'm able to open the file. I'll try narrowing it down as my map would be compatible with a 24 player game mode.:) Hope to get it figured out!

Link to the map (protected and working): http://www.makemehost.com/ShareMaps/WarcraftTW3.10b.w3x

Here are the errors I get for reference.

cvDYhX9ogwQzW852QeAeW9BU5CoE-hxohlxYlDewidv5s-EK5JlQzbsQ3QfnmsCrEbm_VIBdD8mZWFlAMmTt-4FL2D5CCqRabc_kIjdAA_Ayk21x-oTSGR121mZgYlMhMPLBcAjT
 

Dr Super Good

Spell Reviewer
Level 63
Joined
Jan 18, 2005
Messages
27,180
Link to the map (protected and working):
Not helpful... No one can help you with errors in a version of the map not designed to be loaded in WorldEdit.
Here are the errors I get for reference.
Was the map made using some kind of third party extended GUI? For example WEU or JNGP with UMSWE enabled?
 
Level 3
Joined
Apr 25, 2013
Messages
38
Not helpful... No one can help you with errors in a version of the map not designed to be loaded in WorldEdit.
Was the map made using some kind of third party extended GUI? For example WEU or JNGP with UMSWE enabled?
JNGP and UMSWE is enabled. I'm currently removing triggers to narrow it down. I also only included the link for reference in case anyone was curious about the actual map (Which you have actually helped me with before and is the one of the 2-3 other people who has ever received the map unprotected). As much as it would be nice moving back to the normal editor for the 24 player function its not a necessity to get it figured out right away. If I do find what function is causing it I'll report it here.


Update!!
gbbuPhh6LburZyAt432XaF-asuUOLALpR9cRVMN23Q1n3-4P6LOBrYZ-YqhHxYPztc8QTLdxmCtuds4nn2R0GvMmJtA7Oi9kil-qdf9x2Ch4Hr3dmBOks6vAMwUD--Yane4vg-_d

Out of all the crazy triggers it was just this function that was crashing the editor. The funny thing is this trigger was made but isn't actually used yet. In my map all heroes start at level 4 with all 3 base spells learned. I made this trigger so when they would use a Tome of Retraining it would set their spells to level 1. Funny thing is I still haven't added the item as I've been updating heroes and wasn't going to enter all their spells till I was done then add the item. However, when I did get the map to open minus that 1 trigger I got this when I tried to save.

G3BksAnPjGiE-UnmuLYXynCLpro3tE74EMJmq1LLUWIV86cXYMK3zahPr5QenQePef-A6j-W9KKTtTWGElLB-Kgne4gDZpgHWmYVvpusbseEnPYLvyU6UkueTtf026X-IM5jtFls

I was under the impression that limits were bring increased I hope these ones can be increased as well!


Update 2!
After looking over the triggers it appears in the JNGP I use that there are 2 Learn Skill functions. I believe the one I used was the bottom one. I didn't even know there was 2, let alone have a preference. I think I can salvage the trigger even without having to wait through all the loading by just changing it to the normal Learn skills.
jBRJ-8VHoykAz4FdAS7HZpLZVrfZeAuhUlY4LnUWCvEXR5eGK3ki5deLEcHCOrxu5fCaSZA6X8DkVQgGAr6FZ1ylyA1ioB6Vs_BrfVqxjU6dpK8Vc7d0Wq6RECWOE0XrUl3ybbQc
 
Last edited:
Level 2
Joined
Apr 27, 2015
Messages
13
I had to do similar work for LTA.
Later I discovered an easier way than going through all your triggers. Open your map in the editor and write down the names of the functions that the editor cannot find. Then extract the .j file and search for them there with a Ctrl + F. this way you can find the responsible triggers immediately instead of having to go through each of them and search for the functions that need to be removed.
 
Level 13
Joined
May 10, 2009
Messages
868
EDIT: Updated demo code according to 1.29b.

Special effects stop being rendered when they are moved too far from their initial position. It's probably because their internal coordinates aren't being updated by the new natives. Their visibility is also being affected too. If you create an effect in a visible area and move it to any fogged spot, players will be able to see them while their initial position remains visible.


  • LM Conf
    • Events
      • Time - Elapsed game time is 0.00 seconds
    • Conditions
    • Actions
      • Set SFX_Path = units\undead\Abomination\Abomination.mdl
      • Set SFX_Destruction = Abilities\Spells\Demon\DarkPortal\DarkPortalTarget.mdl
      • Set Speed = 10.00
      • Set timeout = 0.01
      • Trigger - Add to LM Loop <gen> the event (Time - Every timeout seconds of game time)
  • LM Effect
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Launch Missile
    • Actions
      • Trigger - Turn on LM Loop <gen>
      • Set Caster = (Triggering unit)
      • Set point[0] = (Position of Caster)
      • Set point[1] = (Target point of ability being cast)
      • Set Distance = 5000.00
      • Set Angle = (Angle from point[0] to point[1])
      • Special Effect - Create a special effect at point[0] using SFX_Path
      • Set Missile = (Last created special effect)
      • Special Effect - Set Roll of Missile to: (Radians(Angle))
      • Special Effect - Set Scale of Missile to 0.85
      • Special Effect - Set Height of Missile to: 60.00
      • Custom script: call RemoveLocation(udg_point[0])
      • Custom script: call RemoveLocation(udg_point[1])
  • LM Loop
    • Events
    • Conditions
    • Actions
      • Set point[0] = (Point((Position - X of Missile), (Position - Y of Missile)))
      • Set Distance = (Distance - Speed)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Distance Greater than 0.00
        • Then - Actions
          • Set point[1] = (point[0] offset by Speed towards Angle degrees)
          • Special Effect - Set Position of Missile to point[1]
          • Custom script: call RemoveLocation(udg_point[1])
        • Else - Actions
          • Trigger - Turn off LM Loop <gen>
          • Special Effect - Destroy Missile
          • Special Effect - Create a special effect at point[0] using SFX_Destruction
          • Special Effect - Destroy (Last created special effect)
      • Custom script: call RemoveLocation(udg_point[0])
 

Attachments

  • RenderSFX(1.29b).w3x
    20.9 KB · Views: 167
Last edited:

Dr Super Good

Spell Reviewer
Level 63
Joined
Jan 18, 2005
Messages
27,180
I expected the Arthas vs Illidan cinematic model to be broken with the new widescreen mode, and yes, it's pretty broken in certain moments.
The actual solution would be to add a native "forcelegacyaspectratio" which takes a boolean. When true it forces black bars for non 4:3 aspect ratio clients. When false it returns back to the current wide screen behaviour. This is not intended for modders to use in general but rather just as a fix for WC3 campaign cinematics which require 4:3 display area to appear correct such as the Arthas Vs Illidan fight.
 
Level 10
Joined
Apr 4, 2010
Messages
286
The actual solution would be to add a native "forcelegacyaspectratio" which takes a boolean. When true it forces black bars for non 4:3 aspect ratio clients. When false it returns back to the current wide screen behaviour. This is not intended for modders to use in general but rather just as a fix for WC3 campaign cinematics which require 4:3 display area to appear correct such as the Arthas Vs Illidan fight.

I was thinking about this earlier. Even for more "normal" cutscenes, camera bounds are sure to be in weird places if they are viewed now on widescreen vs when they were originally made for 4x3. I bet just playing through the campaign we reveal all kinds of weird stuff in frame that's not supposed to be.
 
Level 8
Joined
Nov 10, 2012
Messages
428
I'm not sure if anyone has reported this already, but when I go to Modify Tileset, the editor freezes and begin to load the nothing, the editor not even crashed... just loading and freezing.
 
The actual solution would be to add a native "forcelegacyaspectratio" which takes a boolean. When true it forces black bars for non 4:3 aspect ratio clients. When false it returns back to the current wide screen behaviour. This is not intended for modders to use in general but rather just as a fix for WC3 campaign cinematics which require 4:3 display area to appear correct such as the Arthas Vs Illidan fight.

Well, that would leave the image letterboxed and with black bars (considering the model simulates a 16:9 ratio or something close to it) which is plain ugly.
 

SpasMaster

Hosted Project: SC
Level 23
Joined
Jan 29, 2010
Messages
1,969
Using 'Arithmetic' values to reduce the cooldown of an ability results in no cooldown at all:

[trigger=""]
CDR Acquire
Events
Unit - A unit Acquires an item
Conditions
Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Item being manipulated) Equal to Ironwood Branch 0000 <gen>
Then - Actions
Set CDR[(Player number of (Triggering player))] = (CDR[(Player number of (Triggering player))] + 0.10)
Else - Actions
Unit - For Unit (Triggering unit), Set cooldown of ability Blizzard, Level: 1 to ((Ability Cooldown of (Triggering unit) for ability Blizzard, Level: 1) x (1.00 - CDR[(Player number of (Triggering player))]))
[/trigger]

[trigger=""]
CDR Lose
Events
Unit - A unit Loses an item
Conditions
Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Item being manipulated) Equal to Ironwood Branch 0000 <gen>
Then - Actions
Set CDR[(Player number of (Triggering player))] = (CDR[(Player number of (Triggering player))] - 0.10)
Else - Actions
Unit - For Unit (Triggering unit), Set cooldown of ability Blizzard, Level: 1 to ((Ability Cooldown of (Triggering unit) for ability Blizzard, Level: 1) x (1.00 - CDR[(Player number of (Triggering player))]))
[/trigger]

Setting the cooldown value to a flat number (for example 2, 3, 5, etc) works fine.
 
Level 13
Joined
Oct 18, 2013
Messages
690
It's probable you messed up your arithmetic (the GUI dialog boxes are hella annoying to work with) and ended up with a <= 0 value.

JASS isn't python or something where you can implicitly change an int to a real.
with the code he provided, it should work. My old Memory CDR functions were done in a pretty similar fashion.
 

SpasMaster

Hosted Project: SC
Level 23
Joined
Jan 29, 2010
Messages
1,969
This makes no sense.
How come?
Blizzard has a 6 seconds cooldown.

[trigger=""]
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Item being manipulated) Equal to Ironwood Branch 0000 <gen>
Then - Actions
Set CDR[(Player number of (Triggering player))] = (CDR[(Player number of (Triggering player))] + 0.10)
Else - Actions
Unit - For Unit (Triggering unit), Set cooldown of ability Blizzard, Level: 1 to ((Ability Cooldown of (Triggering unit) for ability Blizzard, Level: 1) x (1.00 - CDR[(Player number of (Triggering player))]))
[/trigger]
With the given forumula it should become 5.4

However, it goes to 0.
If I don't use an arithmetic calculation, but set the cooldown value to a number, like 2 for example it works fine:
[trigger=""]
Unit - For Unit (Triggering unit), Set cooldown of ability Blizzard, Level: 1 to 2.00
[/trigger]

^ This properly sets the cooldown to 2 seconds.

Please provide a JASS example to prove the problem.

I am sorry but I can't do that. I've never used JASS and can only utilize GUI. :( Regardless, what I post above should work, but it doesn't. There clearly is a bug of some kind and should be addressed, because if we can't use arithmetic values to determine the cooldown of an ability than what good is the function?
 
Level 13
Joined
May 10, 2009
Messages
868
The problem is not related to SpasMaster's formula; The new natives are the problem here.
JASS:
native GetUnitAbilityCooldown                   takes unit whichUnit, integer abilId, integer level returns real
native SetUnitAbilityCooldown                   takes unit whichUnit, integer abilId, integer level, real cooldown returns nothing
native GetAbilityCooldown                       takes integer abilId, integer level returns real

  • GetUnitAbilityCooldown does NOT work. It always returns 0.00;
  • SetUnitAbilityCooldown, as its name suggests, should just affect only one ability for a specific unit, since it asks for a unit data type. However, it affects the ability for all units;
  • GetAbilityCooldown is, of course, being affected by SetUnitAbilityCooldown.

SpasMaster's trigger is using GetUnitAbilityCooldown (0.00 * 0.90 = 0.00).


Additional note: The new item functions are also currently working like SetUnitAbilityCooldown. Their function parameters ask for an item data type, but it affects all of them, as if it were asking for an item type.

Note 2: I wanted to test the new "Mana Cost" functions too, but I noticed that we don't have a setter function for it.
JASS:
native GetAbilityManaCost                       takes integer abilId, integer level returns integer
native GetUnitAbilityManaCost                   takes unit whichUnit, integer abilId, integer level returns integer
So those functions above are redundant at the moment.

The test map itself is terrible, but anyone will notice what I described above is true nonetheless.
There's only one item in the middle of the map, a paladin with holy light, and an archmage with holy light too. If you pick the item up, the triggering unit's holy light cooldown should be set to 3.00. However, it affects both of them.
  • Pickup
    • Events
      • Unit - A unit Acquires an item
    • Conditions
    • Actions
      • Cinematic - Clear the screen of text messages for (All players)
      • Unit - For Unit (Triggering unit), Set cooldown of ability Holy Light, Level: 1 to 3.00
      • Game - Display to (All players) the text: (Game - Ability Cooldown: + (String((Cooldown of Holy Light, Level: 1))))
      • Game - Display to (All players) the text: (Unit - Ability Cooldown: + (String((Ability Cooldown of (Triggering unit) for ability Holy Light, Level: 1))))
  • Drop
    • Events
      • Unit - A unit Loses an item
    • Conditions
    • Actions
      • Cinematic - Clear the screen of text messages for (All players)
      • Unit - For Unit (Triggering unit), Set cooldown of ability Holy Light, Level: 1 to (Cooldown of Holy Light, Level: 1)
      • Game - Display to (All players) the text: (Game - Ability Cooldown: + (String((Cooldown of Holy Light, Level: 1))))
      • Game - Display to (All players) the text: (Unit - Ability Cooldown: + (String((Ability Cooldown of (Triggering unit) for ability Holy Light, Level: 1))))
 

Attachments

  • Cooldown.w3x
    17.3 KB · Views: 190
Last edited:
Level 5
Joined
Oct 28, 2010
Messages
21
  • Use SetItemTooltip with a color code to change its color.
  • Look at it in a shop.
  • Its name does not have the color! It is just white.
Items in shops show color from color codes when normally set in the object editor.

Color codes work fine on SetItemTooltipExtended when viewed in a shop.


I also ran into the same problem mentioned earlier in this thread about some custom icons having bad data and crashing the map when changed with the natives.
 
UnitCancelTimedLife buggs:
  • does not stopp timed lifes
  • it kills heroes having timed Life.
  • AddTimedLife
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Unit Group - Pick every unit in (Units in (Playable map area)) and do (Actions)
        • Loop - Actions
          • Unit - Add a 60.00 second Generic expiration timer to (Picked unit)
  • CancleTimedLife
    • Events
      • Time - Elapsed game time is 3.00 seconds
    • Conditions
    • Actions
      • Game - Display to (All players) the text: (Name of the current trigger)
      • Unit Group - Pick every unit in (Units in (Playable map area)) and do (Actions)
        • Loop - Actions
          • Unit - Cancel Timed Life for (Picked unit)
 

Attachments

  • UnitCancelTimedLife.w3x
    17.2 KB · Views: 161

Dr Super Good

Spell Reviewer
Level 63
Joined
Jan 18, 2005
Messages
27,180
Those elements use .mdx and can be easily rearranged.
No they cannot because then they lose 4:3 support. Welcome to the pain of supporting different aspect ratios!
For example the mouse is still being stretched.
Likely a bug, similar to how timer dialog, leaderboard and multiboard are not anchored to the top right of wide screen.
 
Status
Not open for further replies.
Top