War's Legacy v1.3 (Kirin Tor Update) (2025)

I tried to play this but I encountered java.nio.file.InvalidPathException: Illegal char <"> at index 13: Melee_V1\28;K"ReplaceableTextures\Splats"\28;K"HumanUberSplat".blp error and it crashed game. So I changed my SLK parser, which was apparently bugged, and recompiled the game.

Then I got

Code:

runThreads() encountered exception at <unknown function>(<unknown source>:-1) at CreateNeutralHostile(war3map.j:20673) at CreateAllUnits(war3map.j:20996) at main(war3map.j:66301)

This is apparently because you are spawning a unit called Blood Wizard that isn't present in my unit data.

So then I recompiled my game to ignore an unknown unit type in these cases (random creep spawn or whatever), and then I got this problem:

Code:

JassException: Max jass array size exceeded at InitGlobals(war3map.j:18425) at main(war3map.j:66316)

So then I recompiled my game with a bigger max array size, noting that I could solve the problem by increasing only by 1 to a size of 32769 instead of 32768 because you're only writing 1 out of bounds write. Then I got this:

Code:

JassException: runThreads() encountered exception at <unknown function>(<unknown source>:-1) at sc___prototype2_evaluate(war3map.j:4513) at h__TriggerRegisterVariableEvent(war3map.j:4518) at InitTrig_Unit_In_Action(war3map.j:21364) at InitCustomTriggers(war3map.j:65383) at main(war3map.j:66317)

I don't really know what happened there so for the time being I programmed the system to ignore TriggerEvaluate calls on a null trigger. Then I got this:

Code:

JassException: runThreads() encountered exception at <unknown function>(<unknown source>:-1) at DFavour___init(war3map.j:8460)Caused by: java.lang.IndexOutOfBoundsException: Index 16 out of bounds for length 16

That was just me, sorry, I had 16 players loaded instead of 28 players mode. So I was being cheezy, changed to 28 players, then of course had

Code:

java.lang.IllegalStateException: Missing texture: ReplaceableTextures\TeamColor\TeamColor16.blp

Because I was being lame and using a 1.27 install as an art asset source for my recompiled game. I guess that one's on me.

So I switched to using art files from 1.29, but then I got this:

Code:

JassException: runThreads() encountered exception at <unknown function>(<unknown source>:-1) at DFavour___init(war3map.j:8460)Caused by: java.lang.IndexOutOfBoundsException: Index 28 out of bounds for length 28

Man, what are we doing here? I was wrong about needing 28 player mode. The problem is an out-of-bounds player access! Am I not crazy?

JASS:

 // Hotkeys loop set i=i + 1 exitwhen i > 5 set HotkeyListener[i]=CreateTrigger() endloop set i=- 1 loop set i=i + 1 exitwhen i > bj_MAX_PLAYER_SLOTS call BlzTriggerRegisterPlayerKeyEvent(HotkeyListener[1], Player(i), OSKEY_Q, s__OSKEY_META_CTRL, true) call BlzTriggerRegisterPlayerKeyEvent(HotkeyListener[2], Player(i), OSKEY_W, s__OSKEY_META_CTRL, true) call BlzTriggerRegisterPlayerKeyEvent(HotkeyListener[3], Player(i), OSKEY_E, s__OSKEY_META_CTRL, true) call BlzTriggerRegisterPlayerKeyEvent(HotkeyListener[4], Player(i), OSKEY_R, s__OSKEY_META_CTRL, true) call BlzTriggerRegisterPlayerKeyEvent(HotkeyListener[5], Player(i), OSKEY_T, s__OSKEY_META_CTRL, true) endloop

The second part of this pretty obviously should have been set to exitwhen i >= bj_MAX_PLAYER_SLOTS.

It's pretty late where I am staying, so I think I will sleep on this. I don't feel like making fake error players for out of bounds calls like Player(28) when it's zero-indexed, why is that even a concept that your map requires?

So then I went ahead and changed Player(28) to return null instead of a crash, because that makes sense.

That led me to this problem:

Code:

JassException: runThreads() encountered exception at <unknown function>(<unknown source>:-1) at InitializeUnitIndexer(war3map.j:23998)Caused by: java.lang.NullPointerException: Cannot invoke "Trigger.addEvent(RemovableTriggerEvent)" because "t" is null

Now, it seems that for the problem above, we didn't agree on what ExecuteFunc should really mean. Apparently this unit indexer is expecting GetTriggeringTrigger to still work inside the ExecuteFunc call, which is a new one on me. On my side, I had been thinking that ExecuteFunc created a new context, where GetTriggeringTrigger wouldn't have a meaningful return value and therefore was returning null.

But my definition of ExecuteFunc had the following code comment in the native implementation anyway (lol!):

Code:

 // TODO below TriggerExecutionScope.EMPTY is probably not correct

So I went ahead and told this thing to run with the scope of its caller.

That got me to the following:

Code:

JassException: runThreads() encountered exception at <unknown function>(<unknown source>:-1) at FavourLoop___onPeriod(war3map.j:19431)Caused by: java.lang.NullPointerException: Cannot invoke "CPlayerJass.getController()" because "player" is null

But why do we have a null error when the script line count is pointing at the DestroyGroup? I'm pretty sure in this case, the JASS debug mode that I'm using in my recompiled engine is busted and has a bad line number tracker on this loop.

If we think for a moment about the broader concept, it's failing because player.getController() can't be called on a null player. So....

Code:

 local integer i= - 1 local integer cVal local player play local string path local unit u loop set i=i + 1 exitwhen i > bj_MAX_PLAYER_SLOTS

... it's this scat again. You're looping 0 - 28 and treating each as a player, for a total of 29 players. I'll try changing native GetPlayerController to return null if called on null instead of a crash, but my life would sure be easier if I didn't have to do that. Can you stop looping at only 28 players, which means Player(27), please?

The null player controller got me to the sweet success... of the void!

View attachment 501221

But obviously the problem here, based on your screenshots, is that you're using the UI natives. I didn't bother to add those to my recompiled game yet, so, too bad, I'm going to bed. Have a good night. Thank you for participating in this aperture science computer aided enrichment activity. Your specimen has been processed, and we now ready to begin the test proper.

War's Legacy v1.3 (Kirin Tor Update) (2025)

References

Top Articles
Latest Posts
Recommended Articles
Article information

Author: Manual Maggio

Last Updated:

Views: 6089

Rating: 4.9 / 5 (69 voted)

Reviews: 92% of readers found this page helpful

Author information

Name: Manual Maggio

Birthday: 1998-01-20

Address: 359 Kelvin Stream, Lake Eldonview, MT 33517-1242

Phone: +577037762465

Job: Product Hospitality Supervisor

Hobby: Gardening, Web surfing, Video gaming, Amateur radio, Flag Football, Reading, Table tennis

Introduction: My name is Manual Maggio, I am a thankful, tender, adventurous, delightful, fantastic, proud, graceful person who loves writing and wants to share my knowledge and understanding with you.