From 240407ded8da2c2cd0b8b7bd2416b007eeacd8f8 Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Thu, 14 May 2026 00:45:04 +0200 Subject: [PATCH 01/38] Fix OutOfBounds exceptions --- .../com/hiveworkshop/rms/parsers/mdlx/MdlxLayer.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/core/src/com/hiveworkshop/rms/parsers/mdlx/MdlxLayer.java b/core/src/com/hiveworkshop/rms/parsers/mdlx/MdlxLayer.java index 0f54476a9..4bb9f5ef8 100644 --- a/core/src/com/hiveworkshop/rms/parsers/mdlx/MdlxLayer.java +++ b/core/src/com/hiveworkshop/rms/parsers/mdlx/MdlxLayer.java @@ -25,7 +25,11 @@ public enum FilterMode { } public static FilterMode fromId(final int id) { - return values()[id]; + if (id > 0 || id < FilterMode.values().length) { + return values()[id]; + } + + return FilterMode.NONE; } public static int nameToId(final String name) { @@ -80,7 +84,10 @@ public void readMdx(final BinaryReader reader, final int version) { final int position = reader.position(); final long size = reader.readUInt32(); - this.filterMode = FilterMode.fromId(reader.readInt32()); + final int filterModeIndex = reader.readInt32(); + if (filterModeIndex > 0 && filterModeIndex < FilterMode.values().length) { + this.filterMode = FilterMode.fromId(filterModeIndex); + } this.flags = reader.readInt32(); // UInt32 in JS this.textureId = reader.readInt32(); this.textureAnimationId = reader.readInt32(); From 4ca9472692a039e2e380b1a1395dc4a5e63a9572 Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Thu, 14 May 2026 02:45:52 +0200 Subject: [PATCH 02/38] War3MapW3i for version 33 and unit test https://github.com/ChiefOfGxBxL/WC3MapSpecification/blob/master/Info/0-33.md --- build.gradle | 7 + core/build.gradle | 11 +- .../warsmash/parsers/w3x/w3i/Player.java | 12 +- .../warsmash/parsers/w3x/w3i/War3MapW3i.java | 193 +++++++++++------- .../parsers/w3x/w3i/War3MapW3iTest.java | 42 ++++ core/test/resources/wowr_w3x/war3map.w3i | Bin 0 -> 948 bytes 6 files changed, 181 insertions(+), 84 deletions(-) create mode 100644 core/test/com/etheller/warsmash/parsers/w3x/w3i/War3MapW3iTest.java create mode 100644 core/test/resources/wowr_w3x/war3map.w3i diff --git a/build.gradle b/build.gradle index 1bec612d2..9a581ceaa 100644 --- a/build.gradle +++ b/build.gradle @@ -76,6 +76,13 @@ project(":core") { api "org.apache.commons:commons-compress:1.20" api "net.nikr:dds:1.0.0" api files(fileTree(dir:'../jars', includes: ['*.jar'])) + + testImplementation "org.junit.jupiter:junit-jupiter-api:5.10.2" + testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:5.10.2" + } + + test { + useJUnitPlatform() } } diff --git a/core/build.gradle b/core/build.gradle index 125bf13eb..5b7ad8f9a 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -2,8 +2,15 @@ sourceCompatibility = 1.17 -sourceSets.main.java.srcDirs = [ "src/" ] - +sourceSets { + main { + java.srcDirs = [ "src/" ] + } + test { + java.srcDirs = [ "test/" ] + resources.srcDirs = [ "test/resources" ] + } +} eclipse.project { name = appName + "-core" diff --git a/core/src/com/etheller/warsmash/parsers/w3x/w3i/Player.java b/core/src/com/etheller/warsmash/parsers/w3x/w3i/Player.java index 5ab3d0afd..bffa29a3a 100644 --- a/core/src/com/etheller/warsmash/parsers/w3x/w3i/Player.java +++ b/core/src/com/etheller/warsmash/parsers/w3x/w3i/Player.java @@ -30,13 +30,13 @@ public void load(final LittleEndianDataInputStream stream, final int version) th ParseUtils.readFloatArray(stream, this.startLocation); this.allyLowPriorities = ParseUtils.readUInt32(stream); this.allyHighPriorities = ParseUtils.readUInt32(stream); - if (version > 30) { + if (version >= 31) { this.enemyLowPrioritiesFlags = ParseUtils.readUInt32(stream); this.enemyHighPrioritiesFlags = ParseUtils.readUInt32(stream); } } - public void save(final LittleEndianDataOutputStream stream) throws IOException { + public void save(final LittleEndianDataOutputStream stream, int version) throws IOException { ParseUtils.writeUInt32(stream, this.id); stream.writeInt(this.type); stream.writeInt(this.race); @@ -45,10 +45,10 @@ public void save(final LittleEndianDataOutputStream stream) throws IOException { ParseUtils.writeFloatArray(stream, this.startLocation); ParseUtils.writeUInt32(stream, this.allyLowPriorities); ParseUtils.writeUInt32(stream, this.allyHighPriorities); - } - - public int getByteLength() { - return 33 + this.name.length(); + if (version >= 31) { + ParseUtils.writeUInt32(stream, this.enemyLowPrioritiesFlags); + ParseUtils.writeUInt32(stream, this.enemyHighPrioritiesFlags); + } } public int getId() { diff --git a/core/src/com/etheller/warsmash/parsers/w3x/w3i/War3MapW3i.java b/core/src/com/etheller/warsmash/parsers/w3x/w3i/War3MapW3i.java index 1be2f4eaa..4d1c67012 100644 --- a/core/src/com/etheller/warsmash/parsers/w3x/w3i/War3MapW3i.java +++ b/core/src/com/etheller/warsmash/parsers/w3x/w3i/War3MapW3i.java @@ -5,11 +5,13 @@ import java.util.List; import com.etheller.warsmash.util.ParseUtils; +import com.etheller.warsmash.util.War3ID; import com.google.common.io.LittleEndianDataInputStream; import com.google.common.io.LittleEndianDataOutputStream; /** * war3map.w3i - the general map information file. + * https://github.com/ChiefOfGxBxL/WC3MapSpecification/blob/master/Info/0-33.md */ public class War3MapW3i { private int version; @@ -33,7 +35,7 @@ public class War3MapW3i { private String loadingScreenText; private String loadingScreenTitle; private String loadingScreenSubtitle; - private int gameDataSet; + private int gameDataSet = 0; private String prologueScreenModel; private String prologueScreenText; private String prologueScreenTitle; @@ -42,13 +44,16 @@ public class War3MapW3i { private final float[] fogHeight = new float[2]; private float fogDensity; private final short[] fogColor = new short[4]; - private int globalWeather; + private War3ID globalWeather; private String soundEnvironment; private char lightEnvironmentTileset; private final short[] waterVertexColor = new short[4]; - private final short[] unknown2ProbablyLua = new short[4]; - private long supportedModes; - private long gameDataVersion; + private int scriptLanguage = 0; // 0 = JASS, 1 = Lua + private long supportedModes; // 1=SD, 2=HD, 3=SD+HD + private long gameDataVersion = 0; // 0=ROC, 1=TFT + private int forceDefaultCameraZoom; + private int forceMaxCameraZoom; + private int forceMinCameraZoom; private final List players = new ArrayList<>(); private final List forces = new ArrayList<>(); private final List upgradeAvailabilityChanges = new ArrayList<>(); @@ -83,45 +88,78 @@ private void load(final LittleEndianDataInputStream stream) throws IOException { ParseUtils.readInt32Array(stream, this.playableSize); this.flags = ParseUtils.readUInt32(stream); this.tileset = (char) stream.read(); - this.campaignBackground = stream.readInt(); - if (this.version > 24) { + if (this.version >= 17) { + this.campaignBackground = stream.readInt(); + } + + if (this.version >= 10 && this.version != 18 && this.version != 19) { this.loadingScreenModel = ParseUtils.readUntilNull(stream); } - this.loadingScreenText = ParseUtils.readUntilNull(stream); - this.loadingScreenTitle = ParseUtils.readUntilNull(stream); - this.loadingScreenSubtitle = ParseUtils.readUntilNull(stream); - this.gameDataSet = stream.readInt(); + if (this.version >= 10) { + this.loadingScreenText = ParseUtils.readUntilNull(stream); + } - if (this.version > 24) { + if (this.version >= 11) { + this.loadingScreenTitle = ParseUtils.readUntilNull(stream); + this.loadingScreenSubtitle = ParseUtils.readUntilNull(stream); + } + + if (this.version >= 17) { + this.gameDataSet = stream.readInt(); + } + + if (this.version >= 13 && this.version != 18 && this.version != 19) { this.prologueScreenModel = ParseUtils.readUntilNull(stream); } - this.prologueScreenText = ParseUtils.readUntilNull(stream); - this.prologueScreenTitle = ParseUtils.readUntilNull(stream); - this.prologueScreenSubtitle = ParseUtils.readUntilNull(stream); + if (this.version >= 13) { + this.prologueScreenText = ParseUtils.readUntilNull(stream); + this.prologueScreenTitle = ParseUtils.readUntilNull(stream); + this.prologueScreenSubtitle = ParseUtils.readUntilNull(stream); + } - if (this.version > 24) { + if (this.version >= 19) { this.useTerrainFog = stream.readInt(); ParseUtils.readFloatArray(stream, this.fogHeight); this.fogDensity = stream.readFloat(); ParseUtils.readUInt8Array(stream, this.fogColor); - this.globalWeather = stream.readInt(); // TODO probably war3id, right? + } + + if (this.version >= 21) { + this.globalWeather = ParseUtils.readWar3ID(stream); + } + + if (this.version >= 22) { this.soundEnvironment = ParseUtils.readUntilNull(stream); + } + + if (this.version >= 23) { this.lightEnvironmentTileset = (char) stream.read(); + } + + if (this.version >= 25) { ParseUtils.readUInt8Array(stream, this.waterVertexColor); } - if (this.version > 27) { - ParseUtils.readUInt8Array(stream, this.unknown2ProbablyLua); + if (this.version >= 28) { + this.scriptLanguage = stream.readInt(); } - if (this.version > 30) { + if (this.version >= 29) { this.supportedModes = ParseUtils.readUInt32(stream); + } + if (this.version >= 30) { this.gameDataVersion = ParseUtils.readUInt32(stream); } - else { - this.gameDataVersion = -1; // indicate to the outside that this was unspecified + + if (this.version >= 32) { + this.forceDefaultCameraZoom = stream.readInt(); + this.forceMaxCameraZoom = stream.readInt(); + } + + if (this.version >= 33) { + this.forceMinCameraZoom = stream.readInt(); } for (int i = 0, l = stream.readInt(); i < l; i++) { @@ -144,6 +182,7 @@ private void load(final LittleEndianDataInputStream stream) throws IOException { // some kind of really stupid protected map??? return; } + if (stream.available() > 0) { for (int i = 0, l = stream.readInt(); i < l; i++) { final UpgradeAvailabilityChange upgradeAvailabilityChange = new UpgradeAvailabilityChange(); @@ -208,49 +247,86 @@ public void save(final LittleEndianDataOutputStream stream) throws IOException { ParseUtils.writeInt32Array(stream, this.playableSize); ParseUtils.writeUInt32(stream, this.flags); stream.write((byte) this.tileset); - stream.writeInt(this.campaignBackground); - if (this.version > 24) { + if (this.version >= 17) { + stream.writeInt(this.campaignBackground); + } + + if (this.version >= 10 && this.version != 18 && this.version != 19) { ParseUtils.writeWithNullTerminator(stream, this.loadingScreenModel); } - ParseUtils.writeWithNullTerminator(stream, this.loadingScreenText); - ParseUtils.writeWithNullTerminator(stream, this.loadingScreenTitle); - ParseUtils.writeWithNullTerminator(stream, this.loadingScreenSubtitle); - stream.writeInt(this.gameDataSet); + if (this.version >= 10) { + ParseUtils.writeWithNullTerminator(stream, this.loadingScreenText); + } - if (this.version > 24) { + if (this.version >= 11) { + ParseUtils.writeWithNullTerminator(stream, this.loadingScreenTitle); + ParseUtils.writeWithNullTerminator(stream, this.loadingScreenSubtitle); + } + + if (this.version >= 17) { + stream.writeInt(this.gameDataSet); + } + + if (this.version >= 13 && this.version != 18 && this.version != 19) { ParseUtils.writeWithNullTerminator(stream, this.prologueScreenModel); } - ParseUtils.writeWithNullTerminator(stream, this.prologueScreenText); - ParseUtils.writeWithNullTerminator(stream, this.prologueScreenTitle); - ParseUtils.writeWithNullTerminator(stream, this.prologueScreenSubtitle); + if (this.version >= 13) { + ParseUtils.writeWithNullTerminator(stream, this.prologueScreenText); + ParseUtils.writeWithNullTerminator(stream, this.prologueScreenTitle); + ParseUtils.writeWithNullTerminator(stream, this.prologueScreenSubtitle); + } - if (this.version > 24) { + if (this.version >= 19) { stream.writeInt(this.useTerrainFog); ParseUtils.writeFloatArray(stream, this.fogHeight); stream.writeFloat(this.fogDensity); ParseUtils.writeUInt8Array(stream, this.fogColor); - stream.writeInt(this.globalWeather); // TODO War3ID??? + } + + if (this.version >= 21) { + ParseUtils.writeWar3ID(stream, this.globalWeather); + } + + if (this.version >= 22) { ParseUtils.writeWithNullTerminator(stream, this.soundEnvironment); + } + + if (this.version >= 23) { stream.write((byte) this.lightEnvironmentTileset); + } + + if (this.version >= 25) { ParseUtils.writeUInt8Array(stream, this.waterVertexColor); } - if (this.version > 27) { - ParseUtils.writeUInt8Array(stream, this.unknown2ProbablyLua); + if (this.version >= 28) { + ParseUtils.writeUInt32(stream, this.scriptLanguage); } - if (this.version > 30) { + if (this.version >= 29) { ParseUtils.writeUInt32(stream, this.supportedModes); + } + + if (this.version >= 30) { ParseUtils.writeUInt32(stream, this.gameDataVersion); } + if (this.version >= 32) { + ParseUtils.writeUInt32(stream, this.forceDefaultCameraZoom); + ParseUtils.writeUInt32(stream, this.forceMaxCameraZoom); + } + + if (this.version >= 33) { + ParseUtils.writeUInt32(stream, this.forceMinCameraZoom); + } + ParseUtils.writeUInt32(stream, this.players.size()); for (final Player player : this.players) { - player.save(stream); + player.save(stream, this.version); } ParseUtils.writeUInt32(stream, this.forces.size()); @@ -284,41 +360,6 @@ public void save(final LittleEndianDataOutputStream stream) throws IOException { table.save(stream); } } - - } - - public int getByteLength() { - int size = 111 + this.name.length() + this.author.length() + this.description.length() - + this.recommendedPlayers.length() + this.loadingScreenText.length() + this.loadingScreenTitle.length() - + this.loadingScreenSubtitle.length() + this.prologueScreenText.length() - + this.prologueScreenTitle.length() + this.prologueScreenSubtitle.length(); - - for (final Player player : this.players) { - size += player.getByteLength(); - } - - for (final Force force : this.forces) { - size += force.getByteLength(); - } - - size += this.upgradeAvailabilityChanges.size() * 16; - - size += this.techAvailabilityChanges.size() * 8; - - for (final RandomUnitTable table : this.randomUnitTables) { - size += table.getByteLength(); - } - - if (this.version > 24) { - size += 36 + this.loadingScreenModel.length() + this.prologueScreenModel.length() - + this.soundEnvironment.length(); - - for (final RandomItemTable table : this.randomItemTables) { - size += table.getByteLength(); - } - } - - return size; } public int getVersion() { @@ -429,7 +470,7 @@ public short[] getFogColor() { return this.fogColor; } - public int getGlobalWeather() { + public War3ID getGlobalWeather() { return this.globalWeather; } @@ -445,8 +486,8 @@ public short[] getWaterVertexColor() { return this.waterVertexColor; } - public short[] getUnknown2() { - return this.unknown2ProbablyLua; + public int getScriptLanguage() { + return this.scriptLanguage; } public long getSupportedModes() { diff --git a/core/test/com/etheller/warsmash/parsers/w3x/w3i/War3MapW3iTest.java b/core/test/com/etheller/warsmash/parsers/w3x/w3i/War3MapW3iTest.java new file mode 100644 index 000000000..82899a358 --- /dev/null +++ b/core/test/com/etheller/warsmash/parsers/w3x/w3i/War3MapW3iTest.java @@ -0,0 +1,42 @@ +package com.etheller.warsmash.util; + +import com.etheller.warsmash.parsers.w3x.w3i.War3MapW3i; +import com.google.common.io.LittleEndianDataInputStream; +import com.google.common.io.LittleEndianDataOutputStream; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; + +import java.io.IOException; + +class War3MapW3iTest { + + @Test + void testWoWReforged() throws IOException { + War3MapW3i mapInfo; + try (LittleEndianDataInputStream stream = new LittleEndianDataInputStream( + getClass().getClassLoader().getResourceAsStream("wowr_w3x/war3map.w3i"))) { + mapInfo = new War3MapW3i(stream); + } + + assertEquals(33, mapInfo.getVersion()); + assertEquals("TRIGSTR_004", mapInfo.getAuthor()); + assertEquals(12, mapInfo.getPlayers().size()); + assertEquals(3, mapInfo.getForces().size()); + + java.io.File testFile = java.io.File.createTempFile("war3map_", ".w3i"); + testFile.deleteOnExit(); + + try (LittleEndianDataOutputStream out = new LittleEndianDataOutputStream(new java.io.FileOutputStream(testFile))) { + mapInfo.save(out); + } + + War3MapW3i mapInfo2; + try (LittleEndianDataInputStream in = new LittleEndianDataInputStream(new java.io.FileInputStream(testFile))) { + mapInfo2 = new War3MapW3i(in); + } + + assertEquals(mapInfo.getVersion(), mapInfo2.getVersion()); + assertEquals(mapInfo.getAuthor(), mapInfo2.getAuthor()); + assertEquals(mapInfo.getPlayers().size(), mapInfo2.getPlayers().size()); + } +} diff --git a/core/test/resources/wowr_w3x/war3map.w3i b/core/test/resources/wowr_w3x/war3map.w3i new file mode 100644 index 0000000000000000000000000000000000000000..28a306ee850e9ef1ec3ebad8ea88293b260ef18d GIT binary patch literal 948 zcmZ{jJxjzu5Qbkr&u_4@QA8|7$X$}V3l>_P*q&F3U@O>&U@aD&KkK^t4R#)awRRSM ztnVA$WEPTv$ zhaT`q)n2Ri!|@Cwq!O)bQ@}d)@(VcIm)B=Z(sp4-naQ5DiYgV4qs?Bfz#(@o_rXzQ zDF?5|3t!0ViVi69OBCa?cC$8jx2*Yw^#VV>SlWuOWSSXIO6J=z>Sra>iUQ`-Ffyx| zX25(HM&GNN(Kjh;do#>jEfe;0ywcN!V#QY&l-=4O1S4VE|KvT8M6W{NUDSLf=)kqiyzv_N*+waa5Ig&K@ VO?X)NvRD|vAuWCRRe%2f=P#xah;9G? literal 0 HcmV?d00001 From f1ce2e8c84542244eabfc08f04feb1a8a4ede793 Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Thu, 14 May 2026 04:45:42 +0200 Subject: [PATCH 03/38] War3MapW3e for version 12 and unit test https://github.com/ChiefOfGxBxL/WC3MapSpecification/blob/master/Info/0-33.md --- .../warsmash/parsers/w3x/w3e/Corner.java | 37 +++++++++++----- .../warsmash/parsers/w3x/w3e/War3MapW3e.java | 5 ++- .../parsers/w3x/w3e/War3MapW3eTest.java | 41 ++++++++++++++++++ core/test/resources/wowr_w3x/war3map.w3e | Bin 0 -> 614085 bytes 4 files changed, 71 insertions(+), 12 deletions(-) create mode 100644 core/test/com/etheller/warsmash/parsers/w3x/w3e/War3MapW3eTest.java create mode 100644 core/test/resources/wowr_w3x/war3map.w3e diff --git a/core/src/com/etheller/warsmash/parsers/w3x/w3e/Corner.java b/core/src/com/etheller/warsmash/parsers/w3x/w3e/Corner.java index a8c5ae40d..1836c68dc 100644 --- a/core/src/com/etheller/warsmash/parsers/w3x/w3e/Corner.java +++ b/core/src/com/etheller/warsmash/parsers/w3x/w3e/Corner.java @@ -8,6 +8,7 @@ /** * A tile corner. + * https://github.com/ChiefOfGxBxL/WC3MapSpecification/blob/master/Terrain/12.md */ public class Corner { private float groundHeight; @@ -42,21 +43,32 @@ public Corner(final Corner other) { this.layerHeight = other.layerHeight; } - public void load(final LittleEndianDataInputStream stream) throws IOException { + public void load(final LittleEndianDataInputStream stream, int version) throws IOException { this.groundHeight = (stream.readShort() - 8192) / (float) 512; final short waterAndEdge = stream.readShort(); this.waterHeight = ((waterAndEdge & 0x3FFF) - 8192) / (float) 512; this.mapEdge = waterAndEdge & 0x4000; - final short textureAndFlags = ParseUtils.readUInt8(stream); + if (version >= 12) { + final int textureAndFlags = ParseUtils.readUInt16(stream); - this.ramp = textureAndFlags & 0b00010000; - this.blight = textureAndFlags & 0b00100000; - this.water = textureAndFlags & 0b01000000; - this.boundary = textureAndFlags & 0b10000000; + this.ramp = textureAndFlags & 0b00010000; + this.blight = textureAndFlags & 0b00100000; + this.water = textureAndFlags & 0b01000000; + this.boundary = textureAndFlags & 0b10000000; - this.groundTexture = textureAndFlags & 0b00001111; + this.groundTexture = textureAndFlags & 0b00001111; + } else { + final short textureAndFlags = ParseUtils.readUInt8(stream); + + this.ramp = textureAndFlags & 0b00010000; + this.blight = textureAndFlags & 0b00100000; + this.water = textureAndFlags & 0b01000000; + this.boundary = textureAndFlags & 0b10000000; + + this.groundTexture = textureAndFlags & 0b00001111; + } final short variation = ParseUtils.readUInt8(stream); @@ -70,7 +82,7 @@ public void load(final LittleEndianDataInputStream stream) throws IOException { } - public void save(final LittleEndianDataOutputStream stream) throws IOException { + public void save(final LittleEndianDataOutputStream stream, int version) throws IOException { stream.writeShort((short) ((this.groundHeight * 512f) + 8192f)); final int mapEdgeWrite = (this.mapEdge != 0) ? 0x4000 : 0; stream.writeShort((short) ((int) ((this.waterHeight * 512f) + 8192f) | (mapEdgeWrite))); @@ -78,8 +90,13 @@ public void save(final LittleEndianDataOutputStream stream) throws IOException { final int blightWrite = (this.blight != 0) ? 0b00100000 : 0; final int waterWrite = (this.water != 0) ? 0b01000000 : 0; final int boundaryWrite = (this.boundary != 0) ? 0b10000000 : 0; - ParseUtils.writeUInt8(stream, - (short) ((rampWrite) | (blightWrite) | (waterWrite) | (boundaryWrite) | this.groundTexture)); + if (version >= 12) { + ParseUtils.writeUInt16(stream, + (int) ((rampWrite) | (blightWrite) | (waterWrite) | (boundaryWrite) | this.groundTexture)); + } else { + ParseUtils.writeUInt8(stream, + (short) ((rampWrite) | (blightWrite) | (waterWrite) | (boundaryWrite) | this.groundTexture)); + } ParseUtils.writeUInt8(stream, (short) ((this.cliffVariation << 5) | this.groundVariation)); ParseUtils.writeUInt8(stream, (short) ((this.cliffTexture << 4) + this.layerHeight)); } diff --git a/core/src/com/etheller/warsmash/parsers/w3x/w3e/War3MapW3e.java b/core/src/com/etheller/warsmash/parsers/w3x/w3e/War3MapW3e.java index 8494df752..2cf3f61cb 100644 --- a/core/src/com/etheller/warsmash/parsers/w3x/w3e/War3MapW3e.java +++ b/core/src/com/etheller/warsmash/parsers/w3x/w3e/War3MapW3e.java @@ -11,6 +11,7 @@ /** * war3map.w3e - the environment file. + * https://github.com/ChiefOfGxBxL/WC3MapSpecification/blob/master/Terrain/12.md */ public class War3MapW3e { private static final War3ID MAGIC_NUMBER = War3ID.fromString("W3E!"); @@ -57,7 +58,7 @@ private boolean load(final LittleEndianDataInputStream stream) throws IOExceptio for (int column = 0, columns = this.mapSize[0]; column < columns; column++) { final Corner corner = new Corner(); - corner.load(stream); + corner.load(stream, this.version); this.corners[row][column] = corner; } @@ -88,7 +89,7 @@ public void save(final LittleEndianDataOutputStream stream) throws IOException { for (final Corner[] row : this.corners) { for (final Corner corner : row) { - corner.save(stream); + corner.save(stream, this.version); } } } diff --git a/core/test/com/etheller/warsmash/parsers/w3x/w3e/War3MapW3eTest.java b/core/test/com/etheller/warsmash/parsers/w3x/w3e/War3MapW3eTest.java new file mode 100644 index 000000000..3b6eff7b7 --- /dev/null +++ b/core/test/com/etheller/warsmash/parsers/w3x/w3e/War3MapW3eTest.java @@ -0,0 +1,41 @@ +package com.etheller.warsmash.parsers.w3x.w3e; + +import com.google.common.io.LittleEndianDataInputStream; +import com.google.common.io.LittleEndianDataOutputStream; +import org.junit.jupiter.api.Test; + +import java.io.IOException; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class War3MapW3eTest { + + @Test + void testWoWReforged() throws IOException { + War3MapW3e mapInfo; + try (LittleEndianDataInputStream stream = new LittleEndianDataInputStream( + getClass().getClassLoader().getResourceAsStream("wowr_w3x/war3map.w3e"))) { + mapInfo = new War3MapW3e(stream); + } + + assertEquals(12, mapInfo.getVersion()); + assertEquals(50, mapInfo.getGroundTiles().size()); + assertEquals(4, mapInfo.getCliffTiles().size()); + + java.io.File testFile = java.io.File.createTempFile("war3map_", ".w3e"); + testFile.deleteOnExit(); + + try (LittleEndianDataOutputStream out = new LittleEndianDataOutputStream(new java.io.FileOutputStream(testFile))) { + mapInfo.save(out); + } + + War3MapW3e mapInfo2; + try (LittleEndianDataInputStream in = new LittleEndianDataInputStream(new java.io.FileInputStream(testFile))) { + mapInfo2 = new War3MapW3e(in); + } + + assertEquals(mapInfo.getVersion(), mapInfo2.getVersion()); + assertEquals(mapInfo.getGroundTiles(), mapInfo2.getGroundTiles()); + assertEquals(mapInfo.getCliffTiles(), mapInfo2.getCliffTiles()); + } +} diff --git a/core/test/resources/wowr_w3x/war3map.w3e b/core/test/resources/wowr_w3x/war3map.w3e new file mode 100644 index 0000000000000000000000000000000000000000..3779dd615401814e15c7eedd03d66cd7aab97f0a GIT binary patch literal 614085 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

`)p&nz-s@wrr$~QRoNxD&-v!cq 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 Date: Thu, 14 May 2026 04:47:32 +0200 Subject: [PATCH 04/38] War3MapW3e for version 12 and unit test https://github.com/ChiefOfGxBxL/WC3MapSpecification/blob/master/Info/0-33.md --- .../com/etheller/warsmash/parsers/w3x/w3e/War3MapW3e.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/core/src/com/etheller/warsmash/parsers/w3x/w3e/War3MapW3e.java b/core/src/com/etheller/warsmash/parsers/w3x/w3e/War3MapW3e.java index 2cf3f61cb..99945375f 100644 --- a/core/src/com/etheller/warsmash/parsers/w3x/w3e/War3MapW3e.java +++ b/core/src/com/etheller/warsmash/parsers/w3x/w3e/War3MapW3e.java @@ -94,11 +94,6 @@ public void save(final LittleEndianDataOutputStream stream) throws IOException { } } - public int getByteLength() { - return 37 + (this.groundTiles.size() * 4) + (this.cliffTiles.size() * 4) - + (this.mapSize[0] * this.mapSize[1] * 7); - } - public int getVersion() { return this.version; } From e69d79d69a5e97b7e7c321e8e119b522ca8d4bc0 Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Thu, 14 May 2026 04:56:26 +0200 Subject: [PATCH 05/38] War3MapW3e for version 12 and unit test https://github.com/ChiefOfGxBxL/WC3MapSpecification/blob/master/Info/0-33.md --- .../warsmash/parsers/w3x/w3e/Corner.java | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/core/src/com/etheller/warsmash/parsers/w3x/w3e/Corner.java b/core/src/com/etheller/warsmash/parsers/w3x/w3e/Corner.java index 1836c68dc..fd609ae87 100644 --- a/core/src/com/etheller/warsmash/parsers/w3x/w3e/Corner.java +++ b/core/src/com/etheller/warsmash/parsers/w3x/w3e/Corner.java @@ -53,12 +53,12 @@ public void load(final LittleEndianDataInputStream stream, int version) throws I if (version >= 12) { final int textureAndFlags = ParseUtils.readUInt16(stream); - this.ramp = textureAndFlags & 0b00010000; - this.blight = textureAndFlags & 0b00100000; - this.water = textureAndFlags & 0b01000000; - this.boundary = textureAndFlags & 0b10000000; + this.ramp = textureAndFlags & 0b00000000_01000000; + this.blight = textureAndFlags & 0b00000000_10000000; + this.water = textureAndFlags & 0b00000001_00000000; + this.boundary = textureAndFlags & 0b00000010_00000000; - this.groundTexture = textureAndFlags & 0b00001111; + this.groundTexture = textureAndFlags & 0b00111111; } else { final short textureAndFlags = ParseUtils.readUInt8(stream); @@ -86,11 +86,16 @@ public void save(final LittleEndianDataOutputStream stream, int version) throws stream.writeShort((short) ((this.groundHeight * 512f) + 8192f)); final int mapEdgeWrite = (this.mapEdge != 0) ? 0x4000 : 0; stream.writeShort((short) ((int) ((this.waterHeight * 512f) + 8192f) | (mapEdgeWrite))); - final int rampWrite = (this.ramp != 0) ? 0b00010000 : 0; - final int blightWrite = (this.blight != 0) ? 0b00100000 : 0; - final int waterWrite = (this.water != 0) ? 0b01000000 : 0; - final int boundaryWrite = (this.boundary != 0) ? 0b10000000 : 0; + int rampWrite = (this.ramp != 0) ? 0b00010000 : 0; + int blightWrite = (this.blight != 0) ? 0b00100000 : 0; + int waterWrite = (this.water != 0) ? 0b01000000 : 0; + int boundaryWrite = (this.boundary != 0) ? 0b10000000 : 0; if (version >= 12) { + rampWrite <<= 2; + blightWrite <<= 2; + waterWrite <<= 2; + boundaryWrite <<= 2; + ParseUtils.writeUInt16(stream, (int) ((rampWrite) | (blightWrite) | (waterWrite) | (boundaryWrite) | this.groundTexture)); } else { From 2c6ed5f5c56f9140af88d4864e587a96474bd08d Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Thu, 14 May 2026 05:38:50 +0200 Subject: [PATCH 06/38] Fix IndexOutOfBoundsException --- .../w3x/rendersim/ability/AbilityDataUI.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/rendersim/ability/AbilityDataUI.java b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/rendersim/ability/AbilityDataUI.java index c9a705606..5a2becc81 100644 --- a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/rendersim/ability/AbilityDataUI.java +++ b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/rendersim/ability/AbilityDataUI.java @@ -192,10 +192,14 @@ public AbilityDataUI(final Warcraft3MapRuntimeObjectData allObjectData, final Ga final int targetAttachmentIndexMax = Math.min(targetAttachmentCount - 1, targetArtPaths.size() - 1); final int targetIteratorCount = Math.max(targetAttachmentCount, targetArtPaths.size()); for (int i = 0; i < targetIteratorCount; i++) { - final String modelPath = targetArtPaths.get(Math.max(0, Math.min(i, targetAttachmentIndexMax))); - final String attachmentPointKey = tryGet(TARGET_ART_ATTACHMENT_POINT, i); - final List attachmentPoints = abilityTypeData.getFieldAsList(attachmentPointKey); - targetArt.add(new EffectAttachmentUI(modelPath, attachmentPoints)); + final int index = Math.max(0, Math.min(i, targetAttachmentIndexMax)); + + if (index >= 0 && index < targetArtPaths.size()) { + final String modelPath = targetArtPaths.get(index); + final String attachmentPointKey = tryGet(TARGET_ART_ATTACHMENT_POINT, i); + final List attachmentPoints = abilityTypeData.getFieldAsList(attachmentPointKey); + targetArt.add(new EffectAttachmentUI(modelPath, attachmentPoints)); + } } final List specialArt = new ArrayList<>(); final List specialArtPaths = Arrays From 1a93d294edafd81a0151f2f3affd700f597fe60e Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Thu, 14 May 2026 05:39:45 +0200 Subject: [PATCH 07/38] Make sure defaultRace is never null --- .../warsmash/viewer5/handlers/w3x/simulation/CSimulation.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/CSimulation.java b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/CSimulation.java index 307ab61de..13f77d823 100644 --- a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/CSimulation.java +++ b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/CSimulation.java @@ -175,7 +175,7 @@ public CSimulation(final War3MapConfig config, final int mapVersion, final DataT for (int i = 0; i < WarsmashConstants.MAX_PLAYERS; i++) { final CBasePlayer configPlayer = config.getPlayer(i); final War3MapConfigStartLoc startLoc = config.getStartLoc(configPlayer.getStartLocationIndex()); - CRace defaultRace = null; + CRace defaultRace = WarsmashConstants.RACE_MANAGER.getRace(1); // Make sure this is not null if nothing matching is found. if (configPlayer.isRacePrefSet(WarsmashConstants.RACE_MANAGER.getRandomRacePreference())) { final CRaceManagerEntry raceEntry = WarsmashConstants.RACE_MANAGER .get(seededRandom.nextInt(WarsmashConstants.RACE_MANAGER.getEntryCount())); From 72ee6fe5adcb8e3999d5e797d96afd4bdb23ab21 Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Thu, 14 May 2026 10:46:47 +0200 Subject: [PATCH 08/38] War3ObjectDataChangeset support version 3 sets on loading files --- .../units/custom/War3ObjectDataChangeset.java | 192 +++++++++--------- 1 file changed, 99 insertions(+), 93 deletions(-) diff --git a/core/src/com/etheller/warsmash/units/custom/War3ObjectDataChangeset.java b/core/src/com/etheller/warsmash/units/custom/War3ObjectDataChangeset.java index ebc737c93..2b4805dba 100644 --- a/core/src/com/etheller/warsmash/units/custom/War3ObjectDataChangeset.java +++ b/core/src/com/etheller/warsmash/units/custom/War3ObjectDataChangeset.java @@ -497,8 +497,7 @@ public boolean loadtable(final LittleEndianDataInputStream stream, final ObjectM existingObject = new ObjectDataChangeEntry(origid, noid); } existingObject.setNewId(readWar3ID(stream)); - } - else { + } else { newid = readWar3ID(stream); if (noid.equals(origid) || noid.equals(newid)) { throw new IOException("the input stream might be screwed"); @@ -508,111 +507,118 @@ public boolean loadtable(final LittleEndianDataInputStream stream, final ObjectM existingObject = new ObjectDataChangeEntry(origid, newid); } } + + int setsCount = 1; + if (this.version >= 3) { - final int reforged133JunkCount = stream.readInt(); - for (int reforged133JunkIndex = 0; reforged133JunkIndex < reforged133JunkCount; reforged133JunkIndex++) { - final int reforgedJunk = stream.readInt(); - } - } - final int ccount = stream.readInt();// Retera: I assume this is change count? - if ((ccount == 0) && isOriginal) { - // throw new IOException("we seem to have reached the end of the stream and get - // zeroes"); - System.err.println("we seem to have reached the end of the stream and get zeroes"); + setsCount = stream.readInt(); } - if (isOriginal) { - debugprint("StandardUnit \"" + origid + "\" " + ccount + " {"); - } - else { - debugprint("CustomUnit \"" + origid + ":" + newid + "\" " + ccount + " {"); - } - for (int j = 0; j < ccount; j++) { - final War3ID chid = readWar3ID(stream); - if (noid.equals(chid)) { - throw new IOException("the input stream might be screwed"); - } - if (!this.detected) { - this.detected = detectKind(chid); + + for (int setIndex = 0; setIndex < setsCount; setIndex++) { + + if (this.version >= 3) { + final int setFlag = stream.readInt(); } - final Change newlyReadChange = new Change(); - newlyReadChange.setId(chid); - newlyReadChange.setVartype(stream.readInt()); - debugprint("\t\"" + chid + "\" {"); - debugprint("\t\tType " + newlyReadChange.getVartype() + ","); - if (extended()) { - newlyReadChange.setLevel(stream.readInt()); - newlyReadChange.setDataptr(stream.readInt()); - debugprint("\t\tLevel " + newlyReadChange.getLevel() + ","); - debugprint("\t\tData " + newlyReadChange.getDataptr() + ","); + final int ccount = stream.readInt();// Retera: I assume this is change count? + if ((ccount == 0) && isOriginal) { + // throw new IOException("we seem to have reached the end of the stream and get + // zeroes"); + System.err.println("we seem to have reached the end of the stream and get zeroes"); } + if (isOriginal) { + debugprint("StandardUnit \"" + origid + "\" " + ccount + " {"); + } else { + debugprint("CustomUnit \"" + origid + ":" + newid + "\" " + ccount + " {"); + } + for (int j = 0; j < ccount; j++) { + final War3ID chid = readWar3ID(stream); + if (noid.equals(chid)) { + throw new IOException("the input stream might be screwed"); + } + if (!this.detected) { + this.detected = detectKind(chid); + } - switch (newlyReadChange.getVartype()) { - case 0: - newlyReadChange.setLongval(stream.readInt()); - debugprint("\t\tValue " + newlyReadChange.getLongval() + ","); - break; - case 3: - ptr = 0; - stringBuilder.setLength(0); - int charRead; - while ((charRead = stream.read()) != 0) { - stringBuilder.append((char) charRead); + final Change newlyReadChange = new Change(); + newlyReadChange.setId(chid); + newlyReadChange.setVartype(stream.readInt()); + debugprint("\t\"" + chid + "\" {"); + debugprint("\t\tType " + newlyReadChange.getVartype() + ","); + if (extended()) { + newlyReadChange.setLevel(stream.readInt()); + newlyReadChange.setDataptr(stream.readInt()); + debugprint("\t\tLevel " + newlyReadChange.getLevel() + ","); + debugprint("\t\tData " + newlyReadChange.getDataptr() + ","); } - newlyReadChange.setStrval(stringBuilder.toString()); - if (inlineWTS && (newlyReadChange.getStrval().length() > 8) - && "TRIGSTR_".equals(newlyReadChange.getStrval().substring(0, 8))) { - final int key = getWTSValue(newlyReadChange); - newlyReadChange.setStrval(wts.get(key)); - if ((newlyReadChange.getStrval() != null) - && (newlyReadChange.getStrval().length() > MAX_STR_LEN)) { - newlyReadChange.setStrval(newlyReadChange.getStrval().substring(0, MAX_STR_LEN - 1)); - } + + switch (newlyReadChange.getVartype()) { + case 0: + newlyReadChange.setLongval(stream.readInt()); + debugprint("\t\tValue " + newlyReadChange.getLongval() + ","); + break; + case 3: + ptr = 0; + stringBuilder.setLength(0); + int charRead; + while ((charRead = stream.read()) != 0) { + stringBuilder.append((char) charRead); + } + newlyReadChange.setStrval(stringBuilder.toString()); + if (inlineWTS && (newlyReadChange.getStrval().length() > 8) + && "TRIGSTR_".equals(newlyReadChange.getStrval().substring(0, 8))) { + final int key = getWTSValue(newlyReadChange); + newlyReadChange.setStrval(wts.get(key)); + if ((newlyReadChange.getStrval() != null) + && (newlyReadChange.getStrval().length() > MAX_STR_LEN)) { + newlyReadChange.setStrval(newlyReadChange.getStrval().substring(0, MAX_STR_LEN - 1)); + } + } + debugprint("\t\tValue \"" + newlyReadChange.getStrval() + "\","); + break; + case 4: + newlyReadChange.setBoolval(stream.readInt() == 1); + debugprint("\t\tValue " + newlyReadChange.isBoolval() + ","); + break; + default: + newlyReadChange.setRealval(stream.readFloat()); + debugprint("\t\tValue " + newlyReadChange.getRealval() + ","); + break; } - debugprint("\t\tValue \"" + newlyReadChange.getStrval() + "\","); - break; - case 4: - newlyReadChange.setBoolval(stream.readInt() == 1); - debugprint("\t\tValue " + newlyReadChange.isBoolval() + ","); - break; - default: - newlyReadChange.setRealval(stream.readFloat()); - debugprint("\t\tValue " + newlyReadChange.getRealval() + ","); - break; - } - final War3ID crap = readWar3ID(stream); - debugprint("\t\tExtra \"" + crap + "\","); - newlyReadChange.setJunkDNA(crap); - List existingChanges = existingObject.getChanges().get(chid); - if (existingChanges == null) { - existingChanges = new ArrayList<>(); - } - Change bestTargetChange = null; - for (final Change targetChange : existingChanges) { - if (targetChange.getLevel() == newlyReadChange.getLevel()) { - bestTargetChange = targetChange; - break; + final War3ID crap = readWar3ID(stream); + debugprint("\t\tExtra \"" + crap + "\","); + newlyReadChange.setJunkDNA(crap); + List existingChanges = existingObject.getChanges().get(chid); + if (existingChanges == null) { + existingChanges = new ArrayList<>(); } - } - if (bestTargetChange != null) { - bestTargetChange.copyFrom(newlyReadChange); - } - else { - existingChanges.add(newlyReadChange.clone()); - if (existingChanges.size() == 1) { - existingObject.getChanges().add(chid, existingChanges); + Change bestTargetChange = null; + for (final Change targetChange : existingChanges) { + if (targetChange.getLevel() == newlyReadChange.getLevel()) { + bestTargetChange = targetChange; + break; + } } - } - if (!crap.equals(existingObject.getOldId()) && !crap.equals(existingObject.getNewId()) - && !crap.equals(noid)) { - for (int charIndex = 0; charIndex < 4; charIndex++) { - if ((crap.charAt(charIndex) < 32) || (crap.charAt(charIndex) > 126)) { - return false; + if (bestTargetChange != null) { + bestTargetChange.copyFrom(newlyReadChange); + } else { + existingChanges.add(newlyReadChange.clone()); + if (existingChanges.size() == 1) { + existingObject.getChanges().add(chid, existingChanges); } } + if (!crap.equals(existingObject.getOldId()) && !crap.equals(existingObject.getNewId()) + && !crap.equals(noid)) { + for (int charIndex = 0; charIndex < 4; charIndex++) { + if ((crap.charAt(charIndex) < 32) || (crap.charAt(charIndex) > 126)) { + return false; + } + } + } + debugprint("\t}"); } - debugprint("\t}"); } + debugprint("}"); if ((newid == null) && !isOriginal) { throw new IllegalStateException("custom unit has no ID!"); From b298a0803b13775e673cf40aa13c332497a3d2ee Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Thu, 14 May 2026 20:06:02 +0200 Subject: [PATCH 09/38] fromId --- core/src/com/hiveworkshop/rms/parsers/mdlx/MdlxLayer.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/core/src/com/hiveworkshop/rms/parsers/mdlx/MdlxLayer.java b/core/src/com/hiveworkshop/rms/parsers/mdlx/MdlxLayer.java index 4bb9f5ef8..442820fde 100644 --- a/core/src/com/hiveworkshop/rms/parsers/mdlx/MdlxLayer.java +++ b/core/src/com/hiveworkshop/rms/parsers/mdlx/MdlxLayer.java @@ -25,7 +25,7 @@ public enum FilterMode { } public static FilterMode fromId(final int id) { - if (id > 0 || id < FilterMode.values().length) { + if (id >= 0 && id < FilterMode.values().length) { return values()[id]; } @@ -84,10 +84,7 @@ public void readMdx(final BinaryReader reader, final int version) { final int position = reader.position(); final long size = reader.readUInt32(); - final int filterModeIndex = reader.readInt32(); - if (filterModeIndex > 0 && filterModeIndex < FilterMode.values().length) { - this.filterMode = FilterMode.fromId(filterModeIndex); - } + this.filterMode = FilterMode.fromId(reader.readInt32()); this.flags = reader.readInt32(); // UInt32 in JS this.textureId = reader.readInt32(); this.textureAnimationId = reader.readInt32(); From b2c3918e0ad677b03f186dd2bc622ed65e9091ad Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Thu, 14 May 2026 20:12:55 +0200 Subject: [PATCH 10/38] WarcraftIIICASC.main to extract Reforged into a local directory --- .../blizzard/casc/io/WarcraftIIICASC.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/core/src/com/hiveworkshop/blizzard/casc/io/WarcraftIIICASC.java b/core/src/com/hiveworkshop/blizzard/casc/io/WarcraftIIICASC.java index 2dbd8a549..28158d7b5 100644 --- a/core/src/com/hiveworkshop/blizzard/casc/io/WarcraftIIICASC.java +++ b/core/src/com/hiveworkshop/blizzard/casc/io/WarcraftIIICASC.java @@ -5,8 +5,11 @@ import java.nio.ByteBuffer; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; import com.hiveworkshop.blizzard.casc.ConfigurationFile; import com.hiveworkshop.blizzard.casc.info.Info; @@ -288,4 +291,37 @@ public Info getBuildInfo() { public FileSystem getRootFileSystem() { return new FileSystem(); } + + public static void main(String[] args) throws IOException { + // Extract Warcraft III: Reforged into a local directory. + final String homeDir = System.getProperty("user.home"); + final Path wc3ReforgedDir = Paths.get(homeDir, "snap/steam/common/.local/share/Steam/steamapps/compatdata/2243394608/pfx/drive_c/Program Files (x86)/Warcraft III"); + final Path targetDir = Path.of(homeDir, "Dokumente/Warcraft III/Reforged"); + try (WarcraftIIICASC casc = new WarcraftIIICASC(wc3ReforgedDir, true)) { + for (var file : casc.getRootFileSystem().enumerateFiles()) { + try { + final Path targetFilePath = targetDir.resolve(file.replace('\\', '/')); + + if (!Files.exists(targetFilePath)) { + final Path parentDir = targetFilePath.getParent(); + System.out.println(file + ": " + targetFilePath + " -> " + parentDir); + Files.createDirectories(parentDir); + final ByteBuffer buffer = casc.getRootFileSystem().readFileData(file); + + if (buffer != null && buffer.remaining() > 0) { + try (var channel = Files.newByteChannel(targetFilePath, StandardOpenOption.CREATE, StandardOpenOption.WRITE)) { + channel.write(buffer); + } + } + } else { + System.out.println(file + ": Ignoring existing file/directory"); + } + } catch (final Exception e) { + e.printStackTrace(); + } + } + } catch (final IOException e) { + e.printStackTrace(); + } + } } From ffb782de23f19e85ae99450a6ed3fcc076e74d14 Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Thu, 14 May 2026 20:16:43 +0200 Subject: [PATCH 11/38] getPortraitModel fix StringIndexOutOfBoundsException --- .../w3x/rendersim/RenderWidgetTypeData.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/rendersim/RenderWidgetTypeData.java b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/rendersim/RenderWidgetTypeData.java index 47f58f921..13a607cf0 100644 --- a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/rendersim/RenderWidgetTypeData.java +++ b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/rendersim/RenderWidgetTypeData.java @@ -44,13 +44,12 @@ protected final String getShadowTexture(String unitShadow) { } protected final MdxModel getPortraitModel(final String path, final MdxModel model) { - MdxModel portraitModel; - final String portraitPath = path.substring(0, path.length() - 4) + "_portrait.mdx"; - if (this.dataSource.has(portraitPath)) { - portraitModel = this.mapViewer.loadModelMdx(portraitPath); - } - else { - portraitModel = model; + MdxModel portraitModel = model; + if (path.length() >= 4) { + final String portraitPath = path.substring(0, path.length() - 4) + "_portrait.mdx"; + if (this.dataSource.has(portraitPath)) { + portraitModel = this.mapViewer.loadModelMdx(portraitPath); + } } return portraitModel; } From 67522da2ef8bd0e937933e881f9a9ef5f97f879c Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Thu, 14 May 2026 20:35:40 +0200 Subject: [PATCH 12/38] ModelViewer.load --- .../warsmash/viewer5/ModelViewer.java | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/core/src/com/etheller/warsmash/viewer5/ModelViewer.java b/core/src/com/etheller/warsmash/viewer5/ModelViewer.java index d1d2fd53b..b4e31feda 100644 --- a/core/src/com/etheller/warsmash/viewer5/ModelViewer.java +++ b/core/src/com/etheller/warsmash/viewer5/ModelViewer.java @@ -140,8 +140,6 @@ public Object[] findHandler(final String ext) { public Resource load(final String src, final PathSolver pathSolver, final Object solverParams) { String finalSrc = src; - String extension = ""; - boolean isFetch = false; // If a given path solver, resolve. if (pathSolver != null) { @@ -149,16 +147,22 @@ public Resource load(final String src, final PathSolver pathSolver, final Object finalSrc = solved.getFinalSrc(); if (!this.dataSource.has(finalSrc)) { - final String ddsPath = finalSrc.substring(0, finalSrc.lastIndexOf('.')) + ".dds"; - if (this.dataSource.has(ddsPath)) { - finalSrc = ddsPath; - } - else { + final int lastIndex = finalSrc.lastIndexOf('.'); + if (lastIndex != -1) { + final String ddsPath = finalSrc.substring(0, lastIndex) + ".dds"; + if (this.dataSource.has(ddsPath)) { + finalSrc = ddsPath; + } + else { + System.err.println("Attempting to load non-existant file: " + finalSrc); + } + } else { System.err.println("Attempting to load non-existant file: " + finalSrc); } } - extension = solved.getExtension(); - isFetch = solved.isFetch(); + + String extension = solved.getExtension(); + boolean isFetch = solved.isFetch(); if (!(extension instanceof String)) { throw new IllegalStateException("The path solver did not return an extension!"); From c90f20d36a406743b385ceb5888c90c16bd3dfce Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Thu, 14 May 2026 20:43:02 +0200 Subject: [PATCH 13/38] Do not load abilities_main #70 --- core/src/com/etheller/warsmash/parsers/jass/Jass2.java | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java index ab6569e48..d1ab0c940 100644 --- a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java +++ b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java @@ -9200,16 +9200,6 @@ private static void registerAbilityUserDataHandleNatives(final JassProgram jassP public void main() { this.simulation.setGlobalScope(this.jassProgramVisitor.getGlobals()); - try { - final JassThread abilitiesThread = this.jassProgramVisitor.getGlobals().createThread("abilities_main", - Collections.emptyList(), TriggerExecutionScope.EMPTY); - this.jassProgramVisitor.getGlobals().queueThread(abilitiesThread); - } - catch (final Exception exc) { - new JassException(this.jassProgramVisitor.getGlobals(), - "Exception on Line " + this.jassProgramVisitor.getGlobals().getLineNumber(), exc) - .printStackTrace(); - } try { final JassThread mainThread = this.jassProgramVisitor.getGlobals().createThread("main", Collections.emptyList(), TriggerExecutionScope.EMPTY); From 932c163587673fd725e30eb9c41f89b429d66d50 Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Thu, 14 May 2026 20:55:15 +0200 Subject: [PATCH 14/38] War3ObjectDataChangesetTest --- .../War3ObjectDataChangesetTest.java | 38 ++++++++++++++++++ core/test/resources/wowr_w3x/war3map.w3a | Bin 0 -> 258640 bytes core/test/resources/wowr_w3x/war3map.w3b | Bin 0 -> 4666 bytes core/test/resources/wowr_w3x/war3map.w3d | Bin 0 -> 10143 bytes core/test/resources/wowr_w3x/war3map.w3h | Bin 0 -> 2517 bytes core/test/resources/wowr_w3x/war3map.w3q | Bin 0 -> 63536 bytes core/test/resources/wowr_w3x/war3map.w3t | Bin 0 -> 116602 bytes core/test/resources/wowr_w3x/war3map.w3u | Bin 0 -> 483458 bytes 8 files changed, 38 insertions(+) create mode 100644 core/test/com/etheller/warsmash/parsers/w3x/objectdata/War3ObjectDataChangesetTest.java create mode 100644 core/test/resources/wowr_w3x/war3map.w3a create mode 100644 core/test/resources/wowr_w3x/war3map.w3b create mode 100644 core/test/resources/wowr_w3x/war3map.w3d create mode 100644 core/test/resources/wowr_w3x/war3map.w3h create mode 100644 core/test/resources/wowr_w3x/war3map.w3q create mode 100644 core/test/resources/wowr_w3x/war3map.w3t create mode 100644 core/test/resources/wowr_w3x/war3map.w3u diff --git a/core/test/com/etheller/warsmash/parsers/w3x/objectdata/War3ObjectDataChangesetTest.java b/core/test/com/etheller/warsmash/parsers/w3x/objectdata/War3ObjectDataChangesetTest.java new file mode 100644 index 000000000..7572dd5b6 --- /dev/null +++ b/core/test/com/etheller/warsmash/parsers/w3x/objectdata/War3ObjectDataChangesetTest.java @@ -0,0 +1,38 @@ +package com.etheller.warsmash.parsers.w3x.objectdata; + +import com.etheller.warsmash.units.custom.War3ObjectDataChangeset; +import com.google.common.io.LittleEndianDataInputStream; +import com.google.common.io.LittleEndianDataOutputStream; +import org.junit.jupiter.api.Test; + +import java.io.IOException; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class War3ObjectDataChangesetTest { + + @Test + void testUnitsWoWReforged() throws IOException { + final War3ObjectDataChangeset unitChangeset = new War3ObjectDataChangeset('u'); + try (LittleEndianDataInputStream stream = new LittleEndianDataInputStream( + getClass().getClassLoader().getResourceAsStream("wowr_w3x/war3map.w3u"))) { + unitChangeset.load(stream, null, false); + } + + assertEquals(2199, unitChangeset.getCustom().size()); + + java.io.File testFile = java.io.File.createTempFile("war3map_", ".w3u"); + testFile.deleteOnExit(); + + try (LittleEndianDataOutputStream out = new LittleEndianDataOutputStream(new java.io.FileOutputStream(testFile))) { + unitChangeset.save(out, false); + } + + final War3ObjectDataChangeset unitChangeset2 = new War3ObjectDataChangeset('u'); + try (LittleEndianDataInputStream stream = new LittleEndianDataInputStream(new java.io.FileInputStream(testFile))) { + unitChangeset.load(stream, null, false); + } + + assertEquals(unitChangeset.getCustom().size(), unitChangeset2.getCustom().size()); + } +} diff --git a/core/test/resources/wowr_w3x/war3map.w3a b/core/test/resources/wowr_w3x/war3map.w3a new file mode 100644 index 0000000000000000000000000000000000000000..4211f5573a9f57accc311dc61e2feaff4a86f3a6 GIT binary patch literal 258640 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

    G^+Pw%PzrV%}w43n-)jk%VN9~je} zYy)~^AI-gcL}_}M;&}^HOpNMAt-9m;ud8N`W@lABLC(m?DV0EZ&}`7-cOv;gq3I#F zM~40n8`KU=)9hg`=&dl#i7;!Sdko6$i!)R=YF2>xCQs(9r;@Se%GMZ8+u%D(7Bn-ae@*1z!Z;N4s$_5 z#{QlP+?yCoR_al}bTsVOJPR+7Ue>t*Drdn&W`yIqDfk&r8<11d9v2sZqam{ zpIchS^7}KlBE*zy=*H37U0?==As7RytR+-L6ecKaQam_G*lgUNYf$8Bs%A%ouF8Qf7-4mjVt$^roUOhQ9wtpoa z-#s5C?TWH9MjoL$3Yy54mEgIxW>~}vUdLuCS8CZT2isW6m34;+PmT!fImS#|P!Xej UfV1;h^E6bFEjMLu?>M~w5A#;ICjbBd literal 0 HcmV?d00001 diff --git a/core/test/resources/wowr_w3x/war3map.w3b b/core/test/resources/wowr_w3x/war3map.w3b new file mode 100644 index 0000000000000000000000000000000000000000..dd8d636dc298a5ea00c90715e816af1cb60fe542 GIT binary patch literal 4666 zcmb`K+fv&w5Qg2-r|CtfA&`XByhm(O` zGIT$j4D^zT)uPvmTX{3zAmQ}k`6+)G&u`Lv9Kev1@~^?4(`7JT2*X&y*DoE}2A`=# z1UZ)jo&Igpw!t)VcbG=re9g$+VcLQ2Fikt`JZ&1eJ515;4%5ipwhCZU7S8*i&xYtL zh-nX4>qTtLNIf@lDGsH)XNk(wdi=G`V|K55oZ#;<^hudF<|}Q$k5qcw@>5#_^syQ@ z)}Z}lGs8iTlQewHvwj$ELeHN>%^>U5Wdk*xk!-6jLr+GsZI-vR#t(g=~*xhfP@&lI*A{3-?KO+>}KT$xfOw zy+@}ktFI7I&|Q#cg&EGxC-#6R$B5$?D{XV;vO%9pelFOiJ`=>+*2kuenZ-))Xv`iE z>x4QO^7@%&(kt}x+%~;Z{hyGBOZI?g)8ar)dSo$R3yh0SgJfS=W_g=wRc>?|#C%=F z*gBDFeczZ_e|?pQ@7+CAnM1J$xmM_9j4S5HIt)60iqCKrV|z0|XGzS}YNp+JR?Mga zlXPIN*JmP=Ph_lZo%FIQL?+*0ytK;0x8rm^EpTG1;t`qR;Wjh%#BF9u%nGwa^(dc3 zrs`lKsCXnZbwjVQanohx!Mi6BCYQ_FWqUVm-r*G?)wXjy$05QJ z;H{iiY3hO8d)r(4^3Fu2UP#7vXJR#>IuV(A;*Wnk$S6lfrrOjuTTi_*Fr}wu@DH7N Bz?uL6 literal 0 HcmV?d00001 diff --git a/core/test/resources/wowr_w3x/war3map.w3d b/core/test/resources/wowr_w3x/war3map.w3d new file mode 100644 index 0000000000000000000000000000000000000000..48612ac4d23b2e490b599f5cb1814beabbb0e70a GIT binary patch literal 10143 zcmd5?-E!JS6sAdkAE7h7@bt2i$>_)Y=%TF+I5rIl)R0hnnDMOH1yl=(SqWq3s`q^Y z=PK{eK1T8meU$D>dlp!(z$~8q0+xd$ZPa3HT17E^shDaZ`SCmM*h9{9i$4lR65{N z>3~b611^;gxKujeQt5z8r30=7eRY%mDRCwAN8-Cm2V5#0aH({_rP2YHN(Wpj9dN01 zzynRkO*Es- zJ5+8;buvUVFM1k{5dXQ*Y(?C~Jp-<|R8;peN7SC6X=5@CXhd-TnM=vgWA0|*Ml`#y zST2<-@j5v4@iJctQDHVADlW;k?HKW4Ys6j8F>uQ5Ad}Nz=10i&nH!8|BoDhz;m|VWL7D~|Sv?z3{ zL!xL;BG*WynWTU(03nw`mY!aq(FFAn%XN7Alg+bT-jB7_=(&Vh&`Vg0pLJfkWS5Ka zL-o_)fIZZLhc>x(_K>iPt?H=lMk_!?uG9vWV!y6a*uIs3-|kjvQRI)vUX9*{5%QLT z#WhOZdV=L&bF!R>e!DDJz1hbze43NtU8wz(;QRt^w#M8$c7WfFX6iU1aHpH8Mu%D3 z@;S>rT#CXf^8KYUL~z#4!&${BiPUJToYj$sn8Btq_9`D^&PEmAQ)Hbepp&`l<8;88drHXTI_qDDpYqb#Ce;s%O&yWm%!1Q^3}`U-S(}*721&E1F=FniAAd?7)mm0|os`N=(sioP)UxO8XwD3_0y5wo zBh|PWNz~7)oiRz*$jmfKX5uUBt>}`i;=n4KY|S*GGR#VCPl8!U_Ij+^+*>#cO~BBJ zMJbF6g+EeT1(L38zN8pU&>iMPR}t|e!xb)}Tj~I$XGZ@6x@ul@!u{q)*JGJ>Fke{w zgF&q2g(w_BE{JTyFAaYl44Z6%XKcNSD5x^9RmoCo@WDXI9(oq2d>v2TWuJOzu+(aN zFle&ro&`;mavAz+6CcmK*<_D(bq7~l+G{fAq&Y=3h``Mv6s-37bpgb*E6@&KoxiH- zbHl&ds|HczZC!VHut9VX*kq?aLw8U!X6UXnMRV4=sRy%5k8pQVMIo86()JTjqntzV z8J@0d%ObiM@?=HyYEa!0C^p7l#+)fVvm#f3+4$Q6`+sNK=RS(2x;A&NYEC TEyLPHXZ+A(Ls2wP+M)jfor3rn literal 0 HcmV?d00001 diff --git a/core/test/resources/wowr_w3x/war3map.w3h b/core/test/resources/wowr_w3x/war3map.w3h new file mode 100644 index 0000000000000000000000000000000000000000..8b12030946390bccc201107235561db0c91f0ac3 GIT binary patch literal 2517 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

    At`q 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 literal 0 HcmV?d00001 diff --git a/core/test/resources/wowr_w3x/war3map.w3u b/core/test/resources/wowr_w3x/war3map.w3u new file mode 100644 index 0000000000000000000000000000000000000000..543924fd8762804ea857a88d67216f1e6a3040f6 GIT binary patch literal 483458 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

    efzwx`$KmZ$BdJwM_;7+j6VS0uMd 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 literal 0 HcmV?d00001 From 0ce626d45026155ec276123db24c4b73d3ae5252 Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Thu, 14 May 2026 20:58:02 +0200 Subject: [PATCH 15/38] unit tests --- .../War3ObjectDataChangesetTest.java | 41 +++++++++++++++---- .../parsers/w3x/w3e/War3MapW3eTest.java | 10 ++--- .../parsers/w3x/w3i/War3MapW3iTest.java | 8 ++-- 3 files changed, 42 insertions(+), 17 deletions(-) diff --git a/core/test/com/etheller/warsmash/parsers/w3x/objectdata/War3ObjectDataChangesetTest.java b/core/test/com/etheller/warsmash/parsers/w3x/objectdata/War3ObjectDataChangesetTest.java index 7572dd5b6..fcd25890b 100644 --- a/core/test/com/etheller/warsmash/parsers/w3x/objectdata/War3ObjectDataChangesetTest.java +++ b/core/test/com/etheller/warsmash/parsers/w3x/objectdata/War3ObjectDataChangesetTest.java @@ -13,26 +13,51 @@ class War3ObjectDataChangesetTest { @Test void testUnitsWoWReforged() throws IOException { - final War3ObjectDataChangeset unitChangeset = new War3ObjectDataChangeset('u'); + final War3ObjectDataChangeset changeset = new War3ObjectDataChangeset('u'); try (LittleEndianDataInputStream stream = new LittleEndianDataInputStream( getClass().getClassLoader().getResourceAsStream("wowr_w3x/war3map.w3u"))) { - unitChangeset.load(stream, null, false); + changeset.load(stream, null, false); } - assertEquals(2199, unitChangeset.getCustom().size()); + assertEquals(2199, changeset.getCustom().size()); - java.io.File testFile = java.io.File.createTempFile("war3map_", ".w3u"); + java.io.File testFile = java.io.File.createTempFile("war3map", ".w3u"); testFile.deleteOnExit(); try (LittleEndianDataOutputStream out = new LittleEndianDataOutputStream(new java.io.FileOutputStream(testFile))) { - unitChangeset.save(out, false); + changeset.save(out, false); } - final War3ObjectDataChangeset unitChangeset2 = new War3ObjectDataChangeset('u'); + final War3ObjectDataChangeset changeset2 = new War3ObjectDataChangeset('u'); try (LittleEndianDataInputStream stream = new LittleEndianDataInputStream(new java.io.FileInputStream(testFile))) { - unitChangeset.load(stream, null, false); + changeset.load(stream, null, false); } - assertEquals(unitChangeset.getCustom().size(), unitChangeset2.getCustom().size()); + assertEquals(changeset.getCustom().size(), changeset2.getCustom().size()); + } + + @Test + void testAbilitiesWoWReforged() throws IOException { + final War3ObjectDataChangeset changeset = new War3ObjectDataChangeset('a'); + try (LittleEndianDataInputStream stream = new LittleEndianDataInputStream( + getClass().getClassLoader().getResourceAsStream("wowr_w3x/war3map.w3a"))) { + changeset.load(stream, null, false); + } + + assertEquals(2148, changeset.getCustom().size()); + + java.io.File testFile = java.io.File.createTempFile("war3map", ".w3a"); + testFile.deleteOnExit(); + + try (LittleEndianDataOutputStream out = new LittleEndianDataOutputStream(new java.io.FileOutputStream(testFile))) { + changeset.save(out, false); + } + + final War3ObjectDataChangeset changeset2 = new War3ObjectDataChangeset('a'); + try (LittleEndianDataInputStream stream = new LittleEndianDataInputStream(new java.io.FileInputStream(testFile))) { + changeset.load(stream, null, false); + } + + assertEquals(changeset.getCustom().size(), changeset2.getCustom().size()); } } diff --git a/core/test/com/etheller/warsmash/parsers/w3x/w3e/War3MapW3eTest.java b/core/test/com/etheller/warsmash/parsers/w3x/w3e/War3MapW3eTest.java index 3b6eff7b7..1aa6c4d73 100644 --- a/core/test/com/etheller/warsmash/parsers/w3x/w3e/War3MapW3eTest.java +++ b/core/test/com/etheller/warsmash/parsers/w3x/w3e/War3MapW3eTest.java @@ -22,16 +22,16 @@ void testWoWReforged() throws IOException { assertEquals(50, mapInfo.getGroundTiles().size()); assertEquals(4, mapInfo.getCliffTiles().size()); - java.io.File testFile = java.io.File.createTempFile("war3map_", ".w3e"); + java.io.File testFile = java.io.File.createTempFile("war3map", ".w3e"); testFile.deleteOnExit(); - try (LittleEndianDataOutputStream out = new LittleEndianDataOutputStream(new java.io.FileOutputStream(testFile))) { - mapInfo.save(out); + try (LittleEndianDataOutputStream stream = new LittleEndianDataOutputStream(new java.io.FileOutputStream(testFile))) { + mapInfo.save(stream); } War3MapW3e mapInfo2; - try (LittleEndianDataInputStream in = new LittleEndianDataInputStream(new java.io.FileInputStream(testFile))) { - mapInfo2 = new War3MapW3e(in); + try (LittleEndianDataInputStream stream = new LittleEndianDataInputStream(new java.io.FileInputStream(testFile))) { + mapInfo2 = new War3MapW3e(stream); } assertEquals(mapInfo.getVersion(), mapInfo2.getVersion()); diff --git a/core/test/com/etheller/warsmash/parsers/w3x/w3i/War3MapW3iTest.java b/core/test/com/etheller/warsmash/parsers/w3x/w3i/War3MapW3iTest.java index 82899a358..5816bdbd8 100644 --- a/core/test/com/etheller/warsmash/parsers/w3x/w3i/War3MapW3iTest.java +++ b/core/test/com/etheller/warsmash/parsers/w3x/w3i/War3MapW3iTest.java @@ -26,13 +26,13 @@ void testWoWReforged() throws IOException { java.io.File testFile = java.io.File.createTempFile("war3map_", ".w3i"); testFile.deleteOnExit(); - try (LittleEndianDataOutputStream out = new LittleEndianDataOutputStream(new java.io.FileOutputStream(testFile))) { - mapInfo.save(out); + try (LittleEndianDataOutputStream stream = new LittleEndianDataOutputStream(new java.io.FileOutputStream(testFile))) { + mapInfo.save(stream); } War3MapW3i mapInfo2; - try (LittleEndianDataInputStream in = new LittleEndianDataInputStream(new java.io.FileInputStream(testFile))) { - mapInfo2 = new War3MapW3i(in); + try (LittleEndianDataInputStream stream = new LittleEndianDataInputStream(new java.io.FileInputStream(testFile))) { + mapInfo2 = new War3MapW3i(stream); } assertEquals(mapInfo.getVersion(), mapInfo2.getVersion()); From 2b6ebfbfae7155b3e396c49f4c9576995cf95063 Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Thu, 14 May 2026 21:10:51 +0200 Subject: [PATCH 16/38] War3ObjectDataChangeset --- .../units/custom/War3ObjectDataChangeset.java | 72 ++++++++++--------- 1 file changed, 38 insertions(+), 34 deletions(-) diff --git a/core/src/com/etheller/warsmash/units/custom/War3ObjectDataChangeset.java b/core/src/com/etheller/warsmash/units/custom/War3ObjectDataChangeset.java index 2b4805dba..2a2fc987e 100644 --- a/core/src/com/etheller/warsmash/units/custom/War3ObjectDataChangeset.java +++ b/core/src/com/etheller/warsmash/units/custom/War3ObjectDataChangeset.java @@ -28,6 +28,7 @@ * * @author Eric * + * Reforged spec: https://github.com/stijnherfst/HiveWE/wiki/war3map(skin).w3*-Modifications */ public final class War3ObjectDataChangeset { public static final int VAR_TYPE_INT = 0; @@ -480,10 +481,8 @@ public boolean loadtable(final LittleEndianDataInputStream stream, final ObjectM final WTS wts, final boolean inlineWTS) throws IOException { final War3ID noid = new War3ID(0); final StringBuilder stringBuilder = new StringBuilder(); - int ptr; final int count = stream.readInt(); for (int i = 0; i < count; i++) { - final long nanoTime = System.nanoTime(); War3ID origid; War3ID newid = null; origid = readWar3ID(stream); @@ -553,12 +552,12 @@ public boolean loadtable(final LittleEndianDataInputStream stream, final ObjectM } switch (newlyReadChange.getVartype()) { - case 0: + case 0: { newlyReadChange.setLongval(stream.readInt()); debugprint("\t\tValue " + newlyReadChange.getLongval() + ","); break; - case 3: - ptr = 0; + } + case 3: { stringBuilder.setLength(0); int charRead; while ((charRead = stream.read()) != 0) { @@ -576,14 +575,17 @@ public boolean loadtable(final LittleEndianDataInputStream stream, final ObjectM } debugprint("\t\tValue \"" + newlyReadChange.getStrval() + "\","); break; - case 4: + } + case 4: { newlyReadChange.setBoolval(stream.readInt() == 1); debugprint("\t\tValue " + newlyReadChange.isBoolval() + ","); break; - default: + } + default: { newlyReadChange.setRealval(stream.readFloat()); debugprint("\t\tValue " + newlyReadChange.getRealval() + ","); break; + } } final War3ID crap = readWar3ID(stream); debugprint("\t\tExtra \"" + crap + "\","); @@ -624,8 +626,6 @@ public boolean loadtable(final LittleEndianDataInputStream stream, final ObjectM throw new IllegalStateException("custom unit has no ID!"); } map.put(isOriginal ? origid : newid, existingObject); - final long endNanoTime = System.nanoTime(); - final long deltaNanoTime = endNanoTime - nanoTime; } return true; } @@ -729,8 +729,8 @@ public boolean saveTable(final LittleEndianDataOutputStream outputStream, final ParseUtils.writeWar3ID(outputStream, cl.getOldId()); ParseUtils.writeWar3ID(outputStream, cl.getNewId()); if (this.version >= 3) { - outputStream.writeInt(1); - outputStream.writeInt(0); + outputStream.writeInt(1); // set count + outputStream.writeInt(0); // set flag } count = totalSize;// cl.getChanges().size(); outputStream.writeInt(count); @@ -743,30 +743,34 @@ public boolean saveTable(final LittleEndianDataOutputStream outputStream, final outputStream.writeInt(change.getDataptr()); } switch (change.getVartype()) { - case 0: - outputStream.writeInt(change.getLongval()); - break; - case 3: - charBuffer.clear(); - byteBuffer.clear(); - charBuffer.put(change.getStrval()); - charBuffer.flip(); - encoder.encode(charBuffer, byteBuffer, false); - byteBuffer.flip(); - final byte[] stringBytes = new byte[byteBuffer.remaining() + 1]; - int i = 0; - while (byteBuffer.hasRemaining()) { - stringBytes[i++] = byteBuffer.get(); + case 0: { + outputStream.writeInt(change.getLongval()); + break; + } + case 3: { + charBuffer.clear(); + byteBuffer.clear(); + charBuffer.put(change.getStrval()); + charBuffer.flip(); + encoder.encode(charBuffer, byteBuffer, false); + byteBuffer.flip(); + final byte[] stringBytes = new byte[byteBuffer.remaining() + 1]; + int i = 0; + while (byteBuffer.hasRemaining()) { + stringBytes[i++] = byteBuffer.get(); + } + stringBytes[i] = 0; + outputStream.write(stringBytes); + break; + } + case 4: { + outputStream.writeInt(change.isBoolval() ? 1 : 0); + break; + } + default: { + outputStream.writeFloat(change.getRealval()); + break; } - stringBytes[i] = 0; - outputStream.write(stringBytes); - break; - case 4: - outputStream.writeInt(change.isBoolval() ? 1 : 0); - break; - default: - outputStream.writeFloat(change.getRealval()); - break; } // if (change.getJunkDNA() == null) { // saveWriteChars(outputStream, cl.getNewId().asStringValue().toCharArray()); From c0c8050f2ce5a2d2cb3a0108cba2dc99c139cf43 Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Fri, 15 May 2026 02:32:13 +0200 Subject: [PATCH 17/38] War3ObjectDataChangeset fix writing the object count if ((totalSize > 0) || !isOriginal) { count++; } --- .../units/custom/War3ObjectDataChangeset.java | 40 ++++++++++++++----- .../War3ObjectDataChangesetTest.java | 4 +- 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/core/src/com/etheller/warsmash/units/custom/War3ObjectDataChangeset.java b/core/src/com/etheller/warsmash/units/custom/War3ObjectDataChangeset.java index 2a2fc987e..63a091c30 100644 --- a/core/src/com/etheller/warsmash/units/custom/War3ObjectDataChangeset.java +++ b/core/src/com/etheller/warsmash/units/custom/War3ObjectDataChangeset.java @@ -8,6 +8,7 @@ import java.nio.charset.Charset; import java.nio.charset.CharsetEncoder; import java.nio.charset.CodingErrorAction; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -513,22 +514,30 @@ public boolean loadtable(final LittleEndianDataInputStream stream, final ObjectM setsCount = stream.readInt(); } + debugprint("setsCount " + setsCount); + for (int setIndex = 0; setIndex < setsCount; setIndex++) { if (this.version >= 3) { final int setFlag = stream.readInt(); + + debugprint("setFlag " + setFlag); } final int ccount = stream.readInt();// Retera: I assume this is change count? + + debugprint("ccount " + ccount); + if ((ccount == 0) && isOriginal) { + // tdauth: This seems to happen if object data has been reset in the World Editor but still is stored with zero modifications in the object data. // throw new IOException("we seem to have reached the end of the stream and get // zeroes"); - System.err.println("we seem to have reached the end of the stream and get zeroes"); + //System.err.println("we seem to have reached the end of the stream and get zeroes"); } if (isOriginal) { - debugprint("StandardUnit \"" + origid + "\" " + ccount + " {"); + debugprint("(" + i + "/" + count + ") StandardObject \"" + origid + "\" " + ccount + " {"); } else { - debugprint("CustomUnit \"" + origid + ":" + newid + "\" " + ccount + " {"); + debugprint("(" + i + "/" + count + ") CustomObject \"" + origid + ":" + newid + "\" " + ccount + " {"); } for (int j = 0; j < ccount; j++) { final War3ID chid = readWar3ID(stream); @@ -716,8 +725,20 @@ public boolean saveTable(final LittleEndianDataOutputStream outputStream, final final CharBuffer charBuffer = CharBuffer.allocate(1024); final ByteBuffer byteBuffer = ByteBuffer.allocate(1024); final War3ID noid = new War3ID(0); - int count; - count = map.size(); + int count = 0; + + for (final Map.Entry entry : map) { + final ObjectDataChangeEntry cl = entry.getValue(); + int totalSize = 0; + for (final Map.Entry> changeEntry : cl.getChanges()) { + totalSize += changeEntry.getValue().size(); + } + + if ((totalSize > 0) || !isOriginal) { + count++; + } + } + outputStream.writeInt(count); for (final Map.Entry entry : map) { final ObjectDataChangeEntry cl = entry.getValue(); @@ -730,11 +751,10 @@ public boolean saveTable(final LittleEndianDataOutputStream outputStream, final ParseUtils.writeWar3ID(outputStream, cl.getNewId()); if (this.version >= 3) { outputStream.writeInt(1); // set count - outputStream.writeInt(0); // set flag + outputStream.writeInt(0); // set flag for the first set } - count = totalSize;// cl.getChanges().size(); - outputStream.writeInt(count); - for (final Map.Entry> changes : entry.getValue().getChanges()) { + outputStream.writeInt(totalSize); + for (final Map.Entry> changes : cl.getChanges()) { for (final Change change : changes.getValue()) { ParseUtils.writeWar3ID(outputStream, change.getId()); outputStream.writeInt(change.getVartype()); @@ -811,6 +831,6 @@ public ObjectMap getCustom() { } private static void debugprint(final String s) { - + //System.out.println(s); } } diff --git a/core/test/com/etheller/warsmash/parsers/w3x/objectdata/War3ObjectDataChangesetTest.java b/core/test/com/etheller/warsmash/parsers/w3x/objectdata/War3ObjectDataChangesetTest.java index fcd25890b..4c7b74d6c 100644 --- a/core/test/com/etheller/warsmash/parsers/w3x/objectdata/War3ObjectDataChangesetTest.java +++ b/core/test/com/etheller/warsmash/parsers/w3x/objectdata/War3ObjectDataChangesetTest.java @@ -30,7 +30,7 @@ void testUnitsWoWReforged() throws IOException { final War3ObjectDataChangeset changeset2 = new War3ObjectDataChangeset('u'); try (LittleEndianDataInputStream stream = new LittleEndianDataInputStream(new java.io.FileInputStream(testFile))) { - changeset.load(stream, null, false); + changeset2.load(stream, null, false); } assertEquals(changeset.getCustom().size(), changeset2.getCustom().size()); @@ -55,7 +55,7 @@ void testAbilitiesWoWReforged() throws IOException { final War3ObjectDataChangeset changeset2 = new War3ObjectDataChangeset('a'); try (LittleEndianDataInputStream stream = new LittleEndianDataInputStream(new java.io.FileInputStream(testFile))) { - changeset.load(stream, null, false); + changeset2.load(stream, null, false); } assertEquals(changeset.getCustom().size(), changeset2.getCustom().size()); From 93638945a18d59265c6a0c6da4775a178e21d188 Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Fri, 15 May 2026 02:35:15 +0200 Subject: [PATCH 18/38] War3ObjectDataChangesetTest --- .../parsers/w3x/objectdata/War3ObjectDataChangesetTest.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/test/com/etheller/warsmash/parsers/w3x/objectdata/War3ObjectDataChangesetTest.java b/core/test/com/etheller/warsmash/parsers/w3x/objectdata/War3ObjectDataChangesetTest.java index 4c7b74d6c..5eac350a9 100644 --- a/core/test/com/etheller/warsmash/parsers/w3x/objectdata/War3ObjectDataChangesetTest.java +++ b/core/test/com/etheller/warsmash/parsers/w3x/objectdata/War3ObjectDataChangesetTest.java @@ -19,6 +19,7 @@ void testUnitsWoWReforged() throws IOException { changeset.load(stream, null, false); } + assertEquals(732, changeset.getOriginal().size()); assertEquals(2199, changeset.getCustom().size()); java.io.File testFile = java.io.File.createTempFile("war3map", ".w3u"); @@ -33,6 +34,7 @@ void testUnitsWoWReforged() throws IOException { changeset2.load(stream, null, false); } + assertEquals(721, changeset2.getOriginal().size(), "Expected several objects without actual modifications to be removed."); assertEquals(changeset.getCustom().size(), changeset2.getCustom().size()); } @@ -44,6 +46,7 @@ void testAbilitiesWoWReforged() throws IOException { changeset.load(stream, null, false); } + assertEquals(62, changeset.getOriginal().size()); assertEquals(2148, changeset.getCustom().size()); java.io.File testFile = java.io.File.createTempFile("war3map", ".w3a"); @@ -58,6 +61,7 @@ void testAbilitiesWoWReforged() throws IOException { changeset2.load(stream, null, false); } + assertEquals(21, changeset2.getOriginal().size(), "Expected several objects without actual modifications to be removed."); assertEquals(changeset.getCustom().size(), changeset2.getCustom().size()); } } From e59ce68d40d6130df0741640ef70d5d127ba08ad Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Fri, 15 May 2026 02:44:34 +0200 Subject: [PATCH 19/38] Check string length --- .../viewer5/handlers/w3x/rendersim/RenderItemTypeData.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/rendersim/RenderItemTypeData.java b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/rendersim/RenderItemTypeData.java index 2d6bfcfaa..e302e073c 100644 --- a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/rendersim/RenderItemTypeData.java +++ b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/rendersim/RenderItemTypeData.java @@ -29,7 +29,7 @@ public RenderItemTypeData(ObjectData itemObjectData, DataSource dataSource, War3 protected RenderItemType createTypeData(War3ID key, GameObject row) { String path = row.getFieldAsString(ITEM_FILE, 0); - if (path.toLowerCase().endsWith(".mdl") || path.toLowerCase().endsWith(".mdx")) { + if (path.length() >= 4 && (path.toLowerCase().endsWith(".mdl") || path.toLowerCase().endsWith(".mdx"))) { path = path.substring(0, path.length() - 4); } final MdxModel model = this.mapViewer.loadModelMdx(path); From a394f44ad39ecc62372295946199db908519a2ff Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Fri, 15 May 2026 03:27:07 +0200 Subject: [PATCH 20/38] MdxModel simple overloading of load instead of instanceof for type safety --- .../warsmash/viewer5/handlers/mdx/MdxModel.java | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/core/src/com/etheller/warsmash/viewer5/handlers/mdx/MdxModel.java b/core/src/com/etheller/warsmash/viewer5/handlers/mdx/MdxModel.java index bacdd1c2b..e4e39ef79 100644 --- a/core/src/com/etheller/warsmash/viewer5/handlers/mdx/MdxModel.java +++ b/core/src/com/etheller/warsmash/viewer5/handlers/mdx/MdxModel.java @@ -86,17 +86,12 @@ public ModelInstance createInstance(final int type) { } } - public void load(final Object bufferOrParser) throws IOException { - MdlxModel parser; - - if (bufferOrParser instanceof MdlxModel) { - parser = (MdlxModel) bufferOrParser; - } - else { - System.err.println("Wasting memory with conversion from InputStream to buffer in MdxModel"); - parser = new MdlxModel(ByteBuffer.wrap(IOUtils.toByteArray((InputStream) bufferOrParser))); - } + public void load(final InputStream stream) throws IOException { + System.err.println("Wasting memory with conversion from InputStream to buffer in MdxModel"); + load(new MdlxModel(ByteBuffer.wrap(IOUtils.toByteArray(stream)))); + } + public void load(final MdlxModel parser) { final ModelViewer viewer = this.viewer; final PathSolver pathSolver = this.pathSolver; final SolverParams solverParams = this.solverParams; From b7c46c1ec88b6a126828ff9e7b9d3f689dafc5ef Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Fri, 15 May 2026 03:41:50 +0200 Subject: [PATCH 21/38] Check if resource files exist before loading them to avoid exceptions --- .../etheller/warsmash/util/ImageUtils.java | 21 +++++++++++-------- .../warsmash/viewer5/ModelViewer.java | 6 +++++- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/core/src/com/etheller/warsmash/util/ImageUtils.java b/core/src/com/etheller/warsmash/util/ImageUtils.java index a4e0dff68..ef33d77ba 100644 --- a/core/src/com/etheller/warsmash/util/ImageUtils.java +++ b/core/src/com/etheller/warsmash/util/ImageUtils.java @@ -31,16 +31,19 @@ public final class ImageUtils { public static final String DEFAULT_ICON_PATH = "ReplaceableTextures\\CommandButtons\\BTNTemp.blp"; public static Texture getAnyExtensionTexture(final DataSource dataSource, final String path) { - BufferedImage image; - try { - final AnyExtensionImage imageInfo = getAnyExtensionImageFixRGB(dataSource, path, "texture"); - image = imageInfo.getImageData(); - if (image != null) { - return ImageUtils.getTexture(image, imageInfo.isNeedsSRGBFix()); + if (dataSource.has(path)) { + BufferedImage image; + try { + final AnyExtensionImage imageInfo = getAnyExtensionImageFixRGB(dataSource, path, "texture"); + image = imageInfo.getImageData(); + if (image != null) { + return ImageUtils.getTexture(image, imageInfo.isNeedsSRGBFix()); + } + } catch (final IOException e) { + return null; } - } - catch (final IOException e) { - return null; + } else { + System.err.println("Missing texture " + path); } return null; } diff --git a/core/src/com/etheller/warsmash/viewer5/ModelViewer.java b/core/src/com/etheller/warsmash/viewer5/ModelViewer.java index b4e31feda..efc198ffd 100644 --- a/core/src/com/etheller/warsmash/viewer5/ModelViewer.java +++ b/core/src/com/etheller/warsmash/viewer5/ModelViewer.java @@ -198,7 +198,11 @@ public Resource load(final String src, final PathSolver pathSolver, final Object // TODO this is a synchronous hack, skipped some Ghostwolf code try { - resource.loadData(this.dataSource.getResourceAsStream(finalSrc), null); + if (this.dataSource.has(finalSrc)) { + resource.loadData(this.dataSource.getResourceAsStream(finalSrc), null); + } else { + System.err.println("Attempting to load non-existant file: " + finalSrc); + } } catch (final Exception e) { throw new IllegalStateException("Unable to load data: " + finalSrc, e); From 116146601c10131ab7e4f9203aebb536f0bb1666 Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Fri, 15 May 2026 03:57:10 +0200 Subject: [PATCH 22/38] nullable --- core/src/com/etheller/warsmash/parsers/jass/Jass2.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java index d1ab0c940..329df3c23 100644 --- a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java +++ b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java @@ -894,7 +894,7 @@ public JassValue call(final List arguments, final GlobalScope globalS (arguments, globalScope, triggerScope) -> { final List group = nullable(arguments, 0, ObjectJassValueVisitor.>getInstance()); - final CUnit whichUnit = arguments.get(1).visit(ObjectJassValueVisitor.getInstance()); + final CUnit whichUnit = nullable(arguments, 1, ObjectJassValueVisitor.getInstance()); if (group != null && whichUnit != null) { if (!group.contains(whichUnit)) { group.add(whichUnit); From 9e191fe0876dc06078a4633c0244e43691f1b5dc Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Fri, 15 May 2026 04:04:44 +0200 Subject: [PATCH 23/38] Native UnitInventorySize --- .../src/com/etheller/warsmash/parsers/jass/Jass2.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java index 329df3c23..66504a88f 100644 --- a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java +++ b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java @@ -2833,6 +2833,17 @@ public void remove() { } return null; }); + jassProgramVisitor.getJassNativeManager().createNative("UnitInventorySize", (arguments, globalScope, triggerScope) -> { + final CUnit unit = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); + + if (unit != null) { + final CAbilityInventory inventoryData = unit.getInventoryData(); + if (inventoryData != null) { + return IntegerJassValue.of(inventoryData.getItemCapacity()); + } + } + return IntegerJassValue.of(0); + }); jassProgramVisitor.getJassNativeManager().createNative("UnitAddItemById", (arguments, globalScope, triggerScope) -> { final CUnit unit = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); From 9e9cbd7d833c27ba6350fa6abaa5f85820ea37ee Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Fri, 15 May 2026 04:32:41 +0200 Subject: [PATCH 24/38] Native KillDestructable nullable --- core/src/com/etheller/warsmash/parsers/jass/Jass2.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java index 66504a88f..f59d76215 100644 --- a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java +++ b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java @@ -2930,8 +2930,10 @@ public void remove() { }); jassProgramVisitor.getJassNativeManager().createNative("KillDestructable", (arguments, globalScope, triggerScope) -> { - final CDestructable dest = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); - dest.setLife(CommonEnvironment.this.simulation, 0f); + final CDestructable dest = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); + if (dest != null) { + dest.setLife(CommonEnvironment.this.simulation, 0f); + } return null; }); jassProgramVisitor.getJassNativeManager().createNative("RemoveDestructable", From 65242ce731df2e1d992bf56be127b26709cfdcad Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Fri, 15 May 2026 04:37:51 +0200 Subject: [PATCH 25/38] Native BlzCreateDestructableZWithSkin --- .../etheller/warsmash/parsers/jass/Jass2.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java index f59d76215..a5baa1959 100644 --- a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java +++ b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java @@ -2916,6 +2916,25 @@ public void remove() { return new HandleJassValue(destructableType, CommonEnvironment.this.simulation .createDestructable(new War3ID(rawcode), x, y, facing, scale, variation)); }); + jassProgramVisitor.getJassNativeManager().createNative("BlzCreateDestructableZWithSkin", + (arguments, globalScope, triggerScope) -> { + int rawcode = arguments.get(0).visit(IntegerJassValueVisitor.getInstance()); + final float x = arguments.get(1).visit(RealJassValueVisitor.getInstance()).floatValue(); + final float y = arguments.get(2).visit(RealJassValueVisitor.getInstance()).floatValue(); + final float z = arguments.get(3).visit(RealJassValueVisitor.getInstance()).floatValue(); + final float facing = arguments.get(4).visit(RealJassValueVisitor.getInstance()).floatValue(); + final float scale = arguments.get(5).visit(RealJassValueVisitor.getInstance()).floatValue(); + final int variation = arguments.get(6).visit(IntegerJassValueVisitor.getInstance()); + final int skinId = arguments.get(7).visit(IntegerJassValueVisitor.getInstance()); + if (skinId != rawcode) { + // throw new IllegalStateException("Our engine does not support + // DestructableSkinID != DestructableID (skinId="+ new War3ID(skinId) + ", + // destId=" + new War3ID(rawcode) + ")"); + rawcode = skinId; + } + return new HandleJassValue(destructableType, CommonEnvironment.this.simulation + .createDestructableZ(new War3ID(rawcode), x, y, z, facing, scale, variation)); + }); jassProgramVisitor.getJassNativeManager().createNative("CreateDestructableZ", (arguments, globalScope, triggerScope) -> { final int rawcode = arguments.get(0).visit(IntegerJassValueVisitor.getInstance()); From 689800e3fc01a3889ea57c24d3d120202e1b7848 Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Fri, 15 May 2026 04:55:51 +0200 Subject: [PATCH 26/38] Native Player checks playerIndex boundaries, GetPlayerController and GetPlayerSlotState support null arguments --- .../etheller/warsmash/parsers/jass/Jass2.java | 22 +++++++++++++------ .../handlers/w3x/simulation/CSimulation.java | 5 +++++ .../w3x/simulation/config/CPlayerAPI.java | 2 ++ .../w3x/simulation/config/War3MapConfig.java | 5 +++++ 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java index a5baa1959..2e90ca3a9 100644 --- a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java +++ b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java @@ -10048,15 +10048,20 @@ public static void registerConfigNatives(final JassProgram jassProgramVisitor, f }); jassProgramVisitor.getJassNativeManager().createNative("GetPlayerController", (arguments, globalScope, triggerScope) -> { - final CPlayerJass player = arguments.get(0) - .visit(ObjectJassValueVisitor.getInstance()); - return new HandleJassValue(mapcontrolType, player.getController()); + final CPlayerJass player = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); + if (player != null) { + return new HandleJassValue(mapcontrolType, player.getController()); + } + return new HandleJassValue(mapcontrolType, null); }); jassProgramVisitor.getJassNativeManager().createNative("GetPlayerSlotState", (arguments, globalScope, triggerScope) -> { - final CPlayerJass player = arguments.get(0) - .visit(ObjectJassValueVisitor.getInstance()); - return new HandleJassValue(playerslotstateType, player.getSlotState()); + final CPlayerJass player = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); + if (player != null) { + return new HandleJassValue(playerslotstateType, player.getSlotState()); + } + + return new HandleJassValue(playerslotstateType, null); }); jassProgramVisitor.getJassNativeManager().createNative("GetPlayerTaxRate", (arguments, globalScope, triggerScope) -> { @@ -10085,7 +10090,10 @@ public static void registerConfigNatives(final JassProgram jassProgramVisitor, f jassProgramVisitor.getJassNativeManager().createNative("Player", (arguments, globalScope, triggerScope) -> { final int playerIndex = arguments.get(0).visit(IntegerJassValueVisitor.getInstance()); - return new HandleJassValue(playerType, playerAPI.getPlayer(playerIndex)); + if (playerIndex >= 0 && playerIndex < playerAPI.getMaxPlayers()) { + return new HandleJassValue(playerType, playerAPI.getPlayer(playerIndex)); + } + return new HandleJassValue(playerType, null); }); jassProgramVisitor.getJassNativeManager().createNative("GetPlayerId", (arguments, globalScope, triggerScope) -> { diff --git a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/CSimulation.java b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/CSimulation.java index 13f77d823..001984b14 100644 --- a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/CSimulation.java +++ b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/CSimulation.java @@ -708,6 +708,11 @@ public void unitCancelUpgradingEvent(final CUnit cUnit, final War3ID upgradeIdTy this.simulationRenderController.unitCancelUpgradingEvent(cUnit, upgradeIdType); } + @Override + public int getMaxPlayers() { + return this.players.size(); + } + @Override public CPlayer getPlayer(final int index) { return this.players.get(index); diff --git a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/config/CPlayerAPI.java b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/config/CPlayerAPI.java index 8f9586d27..ee55f681b 100644 --- a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/config/CPlayerAPI.java +++ b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/config/CPlayerAPI.java @@ -4,6 +4,8 @@ import com.etheller.warsmash.viewer5.handlers.w3x.simulation.players.CPlayerJass; public interface CPlayerAPI { + int getMaxPlayers(); + CBasePlayer getPlayer(int index); void setColor(CPlayerJass player, CPlayerColor color); diff --git a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/config/War3MapConfig.java b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/config/War3MapConfig.java index 27f15b4a9..fa1f64f4e 100644 --- a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/config/War3MapConfig.java +++ b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/config/War3MapConfig.java @@ -154,6 +154,11 @@ public float getStartLocationY(final int startLocIndex) { return this.startLocations[startLocIndex].getY(); } + @Override + public int getMaxPlayers() { + return this.players.length; + } + @Override public CBasePlayer getPlayer(final int index) { return this.players[index]; From 6bb337779d31698bcc7fe1da8bc8c3565754a13a Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Fri, 15 May 2026 05:11:07 +0200 Subject: [PATCH 27/38] Native TriggerRegisterEnterRegion allows null parameters --- .../com/etheller/warsmash/parsers/jass/Jass2.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java index 2e90ca3a9..ac5a9d859 100644 --- a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java +++ b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java @@ -2093,12 +2093,16 @@ public void remove() { }); jassProgramVisitor.getJassNativeManager().createNative("TriggerRegisterEnterRegion", (arguments, globalScope, triggerScope) -> { - final Trigger trigger = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); - final CRegion region = arguments.get(1).visit(ObjectJassValueVisitor.getInstance()); + final Trigger trigger = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); + final CRegion region = nullable(arguments, 1, ObjectJassValueVisitor.getInstance()); final TriggerBooleanExpression boolexpr = nullable(arguments, 2, ObjectJassValueVisitor.getInstance()); - return new HandleJassValue(eventType, - region.add(new CRegionTriggerEnter(globalScope, trigger, boolexpr))); + if (trigger != null && region != null) { + return new HandleJassValue(eventType, + region.add(new CRegionTriggerEnter(globalScope, trigger, boolexpr))); + } + + return null; }); jassProgramVisitor.getJassNativeManager().createNative("GetTriggeringRegion", (arguments, globalScope, triggerScope) -> { From 3158f6a3dae4c817fb8861d0d73ff3c9eeaa1a7d Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Fri, 15 May 2026 05:27:00 +0200 Subject: [PATCH 28/38] JASS type region supports handle ID --- .../com/etheller/warsmash/parsers/jass/Jass2.java | 4 ++-- .../handlers/w3x/simulation/region/CRegion.java | 13 ++++++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java index ac5a9d859..a33463187 100644 --- a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java +++ b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java @@ -1775,7 +1775,7 @@ public JassValue call(final List arguments, final GlobalScope globalS }); jassProgramVisitor.getJassNativeManager().createNative("CreateRegion", (arguments, globalScope, triggerScope) -> { - return new HandleJassValue(regionType, new CRegion()); + return new HandleJassValue(regionType, new CRegion(CommonEnvironment.this.simulation.getHandleIdAllocator().createId())); }); jassProgramVisitor.getJassNativeManager().createNative("RemoveRegion", (arguments, globalScope, triggerScope) -> { @@ -4394,7 +4394,7 @@ public JassValue call(final List arguments, final GlobalScope globalS }); jassProgramVisitor.getJassNativeManager().createNative("GetHandleId", (arguments, globalScope, triggerScope) -> { - final CHandle whichHandle = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); + final CHandle whichHandle = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); if (whichHandle == null) { return IntegerJassValue.ZERO; } diff --git a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/region/CRegion.java b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/region/CRegion.java index 261e399e8..d3c4b48d5 100644 --- a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/region/CRegion.java +++ b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/region/CRegion.java @@ -5,13 +5,24 @@ import com.badlogic.gdx.math.Rectangle; import com.etheller.interpreter.ast.scope.trigger.RemovableTriggerEvent; +import com.etheller.interpreter.ast.util.CHandle; -public class CRegion { +public class CRegion implements CHandle { + private final int handleId; private Rectangle currentBounds; private boolean complexRegion; private final List enterTriggers = new ArrayList<>(); private final List leaveTriggers = new ArrayList<>(); + public CRegion(int handleId) { + this.handleId = handleId; + } + + @Override + public int getHandleId() { + return handleId; + } + public void addRect(final Rectangle rect, final CRegionManager regionManager) { if (this.currentBounds == null) { this.currentBounds = new Rectangle(rect); From ba9603426034a914dbbc0c393e5ebc1e4f9e339a Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Fri, 15 May 2026 05:29:05 +0200 Subject: [PATCH 29/38] getNullValue --- core/src/com/etheller/warsmash/parsers/jass/Jass2.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java index a33463187..c06b19872 100644 --- a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java +++ b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java @@ -10097,7 +10097,7 @@ public static void registerConfigNatives(final JassProgram jassProgramVisitor, f if (playerIndex >= 0 && playerIndex < playerAPI.getMaxPlayers()) { return new HandleJassValue(playerType, playerAPI.getPlayer(playerIndex)); } - return new HandleJassValue(playerType, null); + return playerType.getNullValue(); }); jassProgramVisitor.getJassNativeManager().createNative("GetPlayerId", (arguments, globalScope, triggerScope) -> { From 9dcc1e6a58d752cbe306189fe3892a4571b33808 Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Fri, 15 May 2026 05:33:25 +0200 Subject: [PATCH 30/38] Make JASS native GetHandleId more stable since many types do not implement CHandle yet --- .../com/etheller/warsmash/parsers/jass/Jass2.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java index c06b19872..f2ceada62 100644 --- a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java +++ b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java @@ -4394,11 +4394,15 @@ public JassValue call(final List arguments, final GlobalScope globalS }); jassProgramVisitor.getJassNativeManager().createNative("GetHandleId", (arguments, globalScope, triggerScope) -> { - final CHandle whichHandle = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); - if (whichHandle == null) { - return IntegerJassValue.ZERO; + final Object arg0 = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); + // Many of the JASS types do not implement CHandle yet. + if (arg0 instanceof CHandle) { + final CHandle whichHandle = CHandle.class.cast(arg0); + if (whichHandle != null) { + return IntegerJassValue.of(whichHandle.getHandleId()); + } } - return IntegerJassValue.of(whichHandle.getHandleId()); + return IntegerJassValue.ZERO; }); jassProgramVisitor.getJassNativeManager().createNative("TriggerSleepAction", (arguments, globalScope, triggerScope) -> { From 3a722dc797a1f94677ab680d0a8499cc570e29a6 Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Fri, 15 May 2026 05:34:03 +0200 Subject: [PATCH 31/38] Make JASS native GetHandleId more stable since many types do not implement CHandle yet --- core/src/com/etheller/warsmash/parsers/jass/Jass2.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java index f2ceada62..43ca18c4f 100644 --- a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java +++ b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java @@ -4396,11 +4396,8 @@ public JassValue call(final List arguments, final GlobalScope globalS (arguments, globalScope, triggerScope) -> { final Object arg0 = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); // Many of the JASS types do not implement CHandle yet. - if (arg0 instanceof CHandle) { - final CHandle whichHandle = CHandle.class.cast(arg0); - if (whichHandle != null) { - return IntegerJassValue.of(whichHandle.getHandleId()); - } + if (arg0 != null && arg0 instanceof CHandle) { + return IntegerJassValue.of(CHandle.class.cast(arg0).getHandleId()); } return IntegerJassValue.ZERO; }); From be46273cc8e29df3515da42589ac75743d4a2009 Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Fri, 15 May 2026 08:38:02 +0200 Subject: [PATCH 32/38] Support native JASS function BlzSetUnitName and avoid ConcurrentModificationException in ForGroup --- .../etheller/warsmash/parsers/jass/Jass2.java | 17 +++++++++++++++-- .../viewer5/handlers/w3x/War3MapViewer.java | 2 +- .../viewer5/handlers/w3x/simulation/CUnit.java | 10 ++++++++++ .../viewer5/handlers/w3x/ui/MeleeUI.java | 10 +++++----- 4 files changed, 31 insertions(+), 8 deletions(-) diff --git a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java index 43ca18c4f..e4cc3d453 100644 --- a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java +++ b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java @@ -795,8 +795,19 @@ private CommonEnvironment(final JassProgram jassProgramVisitor, final DataSource (arguments, globalScope, triggerScope) -> { final CUnit whichWidget = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); return whichWidget == null ? JassType.STRING.getNullValue() - : new StringJassValue(whichWidget.getUnitType().getName()); + : new StringJassValue(whichWidget.getName()); }); + jassProgramVisitor.getJassNativeManager().createNative("BlzSetUnitName", + (arguments, globalScope, triggerScope) -> { + final CUnit whichWidget = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); + if (whichWidget != null) { + final String name = nullable(arguments, 1, ObjectJassValueVisitor.getInstance()); + whichWidget.setName(name); + } + + return null; + }); + registerConversionAndStringNatives(jassProgramVisitor, war3MapViewer.getGameUI()); final War3MapConfig mapConfig = war3MapViewer.getMapConfig(); registerConfigNatives(jassProgramVisitor, mapConfig, startlocprioType, gametypeType, placementType, @@ -1506,7 +1517,9 @@ public boolean call(final CUnit unit) { if (group != null) { final CodeJassValue callback = arguments.get(1).visit(CodeJassValueVisitor.getInstance()); try { - for (final CUnit unit : group) { + // tdauth: Do never use a foreach loop here since the group size could be modified by the callback which would lead to a ConcurrentModificationException. + for (int i = 0; i < group.size(); i++) { + final CUnit unit = group.get(i); globalScope.runThreadUntilCompletion(globalScope.createThread(callback, CommonTriggerExecutionScope.enumScope(triggerScope, unit))); } diff --git a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/War3MapViewer.java b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/War3MapViewer.java index 0b44d8f26..93c200bc0 100644 --- a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/War3MapViewer.java +++ b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/War3MapViewer.java @@ -2115,7 +2115,7 @@ public RenderSpellEffect addSpecialEffectTarget(final String modelName, final CW final RenderUnit renderUnit = War3MapViewer.this.unitToRenderPeer.get(targetWidget); if (renderUnit == null) { final NullPointerException nullPointerException = new NullPointerException( - "renderUnit is null! targetWidget is \"" + ((CUnit) targetWidget).getUnitType().getName() + "renderUnit is null! targetWidget is \"" + ((CUnit) targetWidget).getName() + "\", attachPointName=\"" + attachPointNames + "\""); if (WarsmashConstants.ENABLE_DEBUG) { throw nullPointerException; diff --git a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/CUnit.java b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/CUnit.java index a8a39ee79..b0c2749d7 100644 --- a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/CUnit.java +++ b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/CUnit.java @@ -140,6 +140,7 @@ public class CUnit extends CWidget { private static RegionCheckerImpl regionCheckerImpl = new RegionCheckerImpl(); private War3ID typeId; + private String name; private float facing; // degrees private float mana; private int baseMaximumLife; @@ -297,6 +298,7 @@ public CUnit(final int handleId, final int playerIndex, final float x, final flo final War3ID typeId, final float facing, final float mana, final int maximumLife, final float lifeRegen, final int maximumMana, final int speed, final CUnitType unitType) { super(handleId, x, y, life); + this.name = unitType.getName(); this.playerIndex = playerIndex; this.typeId = typeId; this.facing = facing; @@ -328,6 +330,14 @@ public CUnit(final int handleId, final int playerIndex, final float x, final flo computeAllDerivedFields(); } + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + private void beginBehavior(final CSimulation game, final CBehavior behavior) { if (this.currentBehavior != behavior) { final int lastBehaviorHighlightOrderId = this.currentBehavior != null diff --git a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/ui/MeleeUI.java b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/ui/MeleeUI.java index 8ac39d149..304a30a7f 100644 --- a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/ui/MeleeUI.java +++ b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/ui/MeleeUI.java @@ -1893,7 +1893,7 @@ private String getWorldFrameHoverTipText(final CSimulation game, final RenderWid if (!returnValue.isEmpty()) { returnValue += "|n"; } - returnValue += simulationUnit.getUnitType().getName(); + returnValue += simulationUnit.getName(); if (goldMineData != null) { final String colonGold = this.rootFrame.getTemplates().getDecoratedString("COLON_GOLD"); returnValue += "|n" + colonGold + " " + goldMineData.getGold(); @@ -3223,7 +3223,7 @@ private void reloadSelectedUnitUI(final RenderUnit unit) { this.simpleInfoPanelDestructableDetail.setVisible(false); this.simpleBuildQueueBackdrop.setVisible(true); this.simpleInfoPanelUnitDetail.setVisible(false); - this.rootFrame.setText(this.simpleBuildingNameValue, simulationUnit.getUnitType().getName()); + this.rootFrame.setText(this.simpleBuildingNameValue, simulationUnit.getName()); this.rootFrame.setText(this.simpleBuildingDescriptionValue, ""); this.simpleBuildingBuildTimeIndicator.setVisible(true); @@ -3318,7 +3318,7 @@ else if (multiSelect) { this.smashBuffStatusBar.setVisible(!multiSelect && !simulationUnit.isBuilding() && !constructing); final CAbilityCargoHold cargoData = simulationUnit.getCargoData(); if ((cargoData != null) && !cargoData.isEmpty() && !multiSelect && !constructing) { - final String unitTypeName = simulationUnit.getUnitType().getName(); + final String unitTypeName = simulationUnit.getName(); this.attack1Icon.setVisible(false); this.attack2Icon.setVisible(false); this.armorIcon.setVisible(false); @@ -3348,7 +3348,7 @@ else if (multiSelect) { .setUberTip("Level " + cargoContainedUnit.getHeroData().getHeroLevel()); } else { - this.cargoUnitFrames[i].setToolTip(cargoContainedUnit.getUnitType().getName()); + this.cargoUnitFrames[i].setToolTip(cargoContainedUnit.getName()); this.cargoUnitFrames[i].setUberTip(unitUI.getUberTip()); } this.cargoUnitFrames[i].setLifeRatioRemaining( @@ -3371,7 +3371,7 @@ else if (multiSelect) { this.cargoUnitFrames[i].setVisible(false); } final CUnitType unitType = simulationUnit.getUnitType(); - final String unitTypeName = unitType.getName(); + final String unitTypeName = simulationUnit.getName(); final boolean anyAttacks = simulationUnit.getCurrentAttacks().size() > 0; final UIFrame localArmorIcon = this.armorIcon; From 1a6b50f33064ff392a955846ec069a14db5828a6 Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Fri, 15 May 2026 08:42:10 +0200 Subject: [PATCH 33/38] Support native JASS function GetHeroLevel --- .../com/etheller/warsmash/parsers/jass/Jass2.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java index e4cc3d453..f33a9fdae 100644 --- a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java +++ b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java @@ -3548,6 +3548,20 @@ public void remove() { } return null; }); + jassProgramVisitor.getJassNativeManager().createNative("GetHeroLevel", + (arguments, globalScope, triggerScope) -> { + final CUnit whichUnit = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); + + if (whichUnit != null) { + final CAbilityHero heroData = whichUnit.getHeroData(); + if (heroData != null) { + return IntegerJassValue + .of(heroData.getHeroLevel()); + } + } + + return IntegerJassValue.ZERO; + }); jassProgramVisitor.getJassNativeManager().createNative("SetHeroLevel", (arguments, globalScope, triggerScope) -> { final CUnit whichUnit = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); From 57a0e7982e02f144146a8b1cd2e711d98d26710e Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Fri, 15 May 2026 08:47:05 +0200 Subject: [PATCH 34/38] Support native JASS functions GetHeroProperName and BlzSetHeroProperName --- .../etheller/warsmash/parsers/jass/Jass2.java | 32 +++++++++++++++++++ .../abilities/hero/CAbilityHero.java | 4 +++ 2 files changed, 36 insertions(+) diff --git a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java index f33a9fdae..6c8da1d90 100644 --- a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java +++ b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java @@ -3571,6 +3571,38 @@ public void remove() { if (heroData != null) { heroData.setHeroLevel(CommonEnvironment.this.simulation, whichUnit, level, fx); } + return null; + }); + jassProgramVisitor.getJassNativeManager().createNative("GetHeroProperName", + (arguments, globalScope, triggerScope) -> { + final CUnit whichUnit = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); + + if (whichUnit != null) { + final CAbilityHero heroData = whichUnit.getHeroData(); + if (heroData != null) { + return StringJassValue + .of(heroData.getProperName()); + } + } + + return StringJassValue.EMPTY_STRING; + }); + jassProgramVisitor.getJassNativeManager().createNative("BlzSetHeroProperName", + (arguments, globalScope, triggerScope) -> { + final CUnit whichUnit = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); + String heroProperName = nullable(arguments, 1, ObjectJassValueVisitor.getInstance()); + + if (heroProperName == null) { + heroProperName = ""; + } + + if (whichUnit != null) { + final CAbilityHero heroData = whichUnit.getHeroData(); + if (heroData != null) { + heroData.setProperName(heroProperName); + } + } + return null; }); jassProgramVisitor.getJassNativeManager().createNative("SelectHeroSkill", diff --git a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/abilities/hero/CAbilityHero.java b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/abilities/hero/CAbilityHero.java index f6c52be7b..4b404ca44 100644 --- a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/abilities/hero/CAbilityHero.java +++ b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/abilities/hero/CAbilityHero.java @@ -239,6 +239,10 @@ public String getProperName() { return this.properName; } + public void setProperName(String properName) { + this.properName = properName; + } + public void setAwaitingRevive(final boolean awaitingRevive) { this.awaitingRevive = awaitingRevive; } From 3c5051170629dd919ec4b84e9e0844e7af3297a4 Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Fri, 15 May 2026 08:54:16 +0200 Subject: [PATCH 35/38] handleId for CHashtable --- .../com/etheller/warsmash/parsers/jass/Jass2.java | 4 ++-- .../handlers/w3x/simulation/util/CHashtable.java | 14 +++++++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java index 6c8da1d90..bdbf1fdff 100644 --- a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java +++ b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java @@ -4455,7 +4455,7 @@ public JassValue call(final List arguments, final GlobalScope globalS (arguments, globalScope, triggerScope) -> { final Object arg0 = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); // Many of the JASS types do not implement CHandle yet. - if (arg0 != null && arg0 instanceof CHandle) { + if (arg0 instanceof CHandle) { return IntegerJassValue.of(CHandle.class.cast(arg0).getHandleId()); } return IntegerJassValue.ZERO; @@ -5461,7 +5461,7 @@ public HandleJassValue accept(final CItem target) { // }); jassProgramVisitor.getJassNativeManager().createNative("InitHashtable", (arguments, globalScope, triggerScope) -> { - return new HandleJassValue(hashtableType, new CHashtable()); + return new HandleJassValue(hashtableType, new CHashtable(simulation.getHandleIdAllocator().createId())); }); jassProgramVisitor.getJassNativeManager().createNative("SaveInteger", new SaveHashtableValueFunc()); jassProgramVisitor.getJassNativeManager().createNative("SaveReal", new SaveHashtableValueFunc()); diff --git a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/util/CHashtable.java b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/util/CHashtable.java index d82b5ea99..db637e3ac 100644 --- a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/util/CHashtable.java +++ b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/util/CHashtable.java @@ -1,11 +1,23 @@ package com.etheller.warsmash.viewer5.handlers.w3x.simulation.util; +import com.etheller.interpreter.ast.util.CHandle; + import java.util.HashMap; import java.util.Map; -public class CHashtable { +public class CHashtable implements CHandle { + private final int handleId; private final Map> parentKeyToChildTable = new HashMap<>(); + public CHashtable(final int handleId) { + this.handleId = handleId; + } + + @Override + public int getHandleId() { + return handleId; + } + public void save(final Integer parentKey, final Integer childKey, final Object object) { Map childTable = this.parentKeyToChildTable.get(parentKey); if (childTable == null) { From dfd2a41d991fc0fce7afb416ea654fc985ba6a48 Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Fri, 15 May 2026 09:13:39 +0200 Subject: [PATCH 36/38] BlzSetUnitName use empty string instead of null to avoid exceptions, assign unit name when assigning unit type --- core/src/com/etheller/warsmash/parsers/jass/Jass2.java | 6 +++++- .../warsmash/viewer5/handlers/w3x/simulation/CUnit.java | 3 ++- .../etheller/warsmash/viewer5/handlers/w3x/ui/MeleeUI.java | 6 +++--- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java index bdbf1fdff..740f79709 100644 --- a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java +++ b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java @@ -802,7 +802,11 @@ private CommonEnvironment(final JassProgram jassProgramVisitor, final DataSource final CUnit whichWidget = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); if (whichWidget != null) { final String name = nullable(arguments, 1, ObjectJassValueVisitor.getInstance()); - whichWidget.setName(name); + if (name != null) { + whichWidget.setName(name); + } else { + whichWidget.setName(""); // tdauth: Avoid null to avoid exceptions in UI. + } } return null; diff --git a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/CUnit.java b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/CUnit.java index b0c2749d7..72422481a 100644 --- a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/CUnit.java +++ b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/CUnit.java @@ -298,7 +298,6 @@ public CUnit(final int handleId, final int playerIndex, final float x, final flo final War3ID typeId, final float facing, final float mana, final int maximumLife, final float lifeRegen, final int maximumMana, final int speed, final CUnitType unitType) { super(handleId, x, y, life); - this.name = unitType.getName(); this.playerIndex = playerIndex; this.typeId = typeId; this.facing = facing; @@ -314,6 +313,7 @@ public CUnit(final int handleId, final int playerIndex, final float x, final flo this.turnRate = unitType.getTurnRate(); this.propWindow = unitType.getPropWindow(); this.unitType = unitType; + this.name = unitType.getName(); this.defenseType = unitType.getDefenseType(); this.classifications.addAll(unitType.getClassifications()); this.targetedAs.addAll(unitType.getTargetedAs()); @@ -1773,6 +1773,7 @@ public void setTypeId(final CSimulation game, final War3ID typeId, final boolean final float manaRatio = this.maximumMana == 0 ? Float.NaN : this.mana / this.maximumMana; final CUnitType previousUnitType = getUnitType(); this.unitType = game.getUnitData().getUnitType(typeId); + this.name = this.unitType.getName(); this.maximumMana = this.unitType.getManaMaximum(); this.maximumLife = this.unitType.getMaxLife(); this.life = lifeRatio * this.maximumLife; diff --git a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/ui/MeleeUI.java b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/ui/MeleeUI.java index 304a30a7f..b0922eef4 100644 --- a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/ui/MeleeUI.java +++ b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/ui/MeleeUI.java @@ -3371,7 +3371,7 @@ else if (multiSelect) { this.cargoUnitFrames[i].setVisible(false); } final CUnitType unitType = simulationUnit.getUnitType(); - final String unitTypeName = simulationUnit.getName(); + final String unitName = simulationUnit.getName(); final boolean anyAttacks = simulationUnit.getCurrentAttacks().size() > 0; final UIFrame localArmorIcon = this.armorIcon; @@ -3475,7 +3475,7 @@ else if (multiSelect) { final int heroLevel = heroData.getHeroLevel(); this.simpleClassValue.setVisible(true); this.rootFrame.setText(this.simpleClassValue, - String.format(infopanelLevelClass, heroLevel, unitTypeName)); + String.format(infopanelLevelClass, heroLevel, unitName)); this.rootFrame.setText(this.simpleNameValue, heroData.getProperName()); this.simpleHeroLevelBar.setVisible(true); final CGameplayConstants gameplayConstants = this.war3MapViewer.simulation.getGameplayConstants(); @@ -3485,7 +3485,7 @@ else if (multiSelect) { } else { this.simpleClassValue.setVisible(!simulationUnit.isBuilding()); - this.rootFrame.setText(this.simpleNameValue, unitTypeName); + this.rootFrame.setText(this.simpleNameValue, unitName); String classText = null; for (final CUnitClassification classification : simulationUnit.getClassifications()) { if (classification.getDisplayName() != null) { From a5428d25eb3effbdb9b4cbabe6ee54c26821f4dd Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Fri, 15 May 2026 19:31:02 +0200 Subject: [PATCH 37/38] CRect which supports handleId --- .../etheller/warsmash/parsers/jass/Jass2.java | 33 ++++++++++--------- .../handlers/w3x/simulation/rect/CRect.java | 18 ++++++++++ 2 files changed, 35 insertions(+), 16 deletions(-) create mode 100644 core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/rect/CRect.java diff --git a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java index 740f79709..b464f72b6 100644 --- a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java +++ b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java @@ -199,6 +199,7 @@ import com.etheller.warsmash.viewer5.handlers.w3x.simulation.players.vision.CFogModifierJassMulti; import com.etheller.warsmash.viewer5.handlers.w3x.simulation.players.vision.CFogModifierJassSingle; import com.etheller.warsmash.viewer5.handlers.w3x.simulation.players.vision.CRectFogModifier; +import com.etheller.warsmash.viewer5.handlers.w3x.simulation.rect.CRect; import com.etheller.warsmash.viewer5.handlers.w3x.simulation.region.CRegion; import com.etheller.warsmash.viewer5.handlers.w3x.simulation.region.CRegionTriggerEnter; import com.etheller.warsmash.viewer5.handlers.w3x.simulation.region.CRegionTriggerLeave; @@ -1681,7 +1682,7 @@ public boolean call(final CUnit unit) { final float miny = arguments.get(1).visit(RealJassValueVisitor.getInstance()).floatValue(); final float maxx = arguments.get(2).visit(RealJassValueVisitor.getInstance()).floatValue(); final float maxy = arguments.get(3).visit(RealJassValueVisitor.getInstance()).floatValue(); - return new HandleJassValue(rectType, new Rectangle(minx, miny, maxx - minx, maxy - miny)); + return new HandleJassValue(rectType, new CRect(this.simulation.getHandleIdAllocator().createId(), minx, miny, maxx - minx, maxy - miny)); }); jassProgramVisitor.getJassNativeManager().createNative("RectFromLoc", (arguments, globalScope, triggerScope) -> { @@ -1693,18 +1694,18 @@ public boolean call(final CUnit unit) { final float miny = min.y; final float maxx = max.x; final float maxy = max.y; - return new HandleJassValue(rectType, new Rectangle(minx, miny, maxx - minx, maxy - miny)); + return new HandleJassValue(rectType, new CRect(this.simulation.getHandleIdAllocator().createId(), minx, miny, maxx - minx, maxy - miny)); }); jassProgramVisitor.getJassNativeManager().createNative("RemoveRect", (arguments, globalScope, triggerScope) -> { - final Rectangle rect = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); + final CRect rect = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); System.err.println( "RemoveRect called but in Java we don't have a destructor, so we need to unregister later when that is implemented"); return null; }); jassProgramVisitor.getJassNativeManager().createNative("SetRect", (arguments, globalScope, triggerScope) -> { - final Rectangle rect = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); + final CRect rect = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); final float minx = arguments.get(1).visit(RealJassValueVisitor.getInstance()).floatValue(); final float miny = arguments.get(2).visit(RealJassValueVisitor.getInstance()).floatValue(); final float maxx = arguments.get(3).visit(RealJassValueVisitor.getInstance()).floatValue(); @@ -1714,7 +1715,7 @@ public boolean call(final CUnit unit) { }); jassProgramVisitor.getJassNativeManager().createNative("SetRectFromLoc", (arguments, globalScope, triggerScope) -> { - final Rectangle rect = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); + final CRect rect = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); final AbilityPointTarget min = arguments.get(1) .visit(ObjectJassValueVisitor.getInstance()); final AbilityPointTarget max = arguments.get(2) @@ -1728,7 +1729,7 @@ public boolean call(final CUnit unit) { }); jassProgramVisitor.getJassNativeManager().createNative("MoveRectTo", (arguments, globalScope, triggerScope) -> { - final Rectangle rect = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); + final CRect rect = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); final float newCenterX = arguments.get(1).visit(RealJassValueVisitor.getInstance()) .floatValue(); final float newCenterY = arguments.get(2).visit(RealJassValueVisitor.getInstance()) @@ -1738,7 +1739,7 @@ public boolean call(final CUnit unit) { }); jassProgramVisitor.getJassNativeManager().createNative("MoveRectToLoc", (arguments, globalScope, triggerScope) -> { - final Rectangle rect = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); + final CRect rect = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); final AbilityPointTarget newCenterLoc = arguments.get(1) .visit(ObjectJassValueVisitor.getInstance()); rect.setCenter(newCenterLoc.x, newCenterLoc.y); @@ -1750,7 +1751,7 @@ public boolean call(final CUnit unit) { @Override public JassValue call(final List arguments, final GlobalScope globalScope, final TriggerExecutionScope triggerScope) { - final Rectangle rect = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); + final CRect rect = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); if (rect == null) { return RealJassValue.ZERO; } @@ -1763,7 +1764,7 @@ public JassValue call(final List arguments, final GlobalScope globalS @Override public JassValue call(final List arguments, final GlobalScope globalScope, final TriggerExecutionScope triggerScope) { - final Rectangle rect = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); + final CRect rect = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); if (rect == null) { return RealJassValue.ZERO; } @@ -1772,22 +1773,22 @@ public JassValue call(final List arguments, final GlobalScope globalS }); jassProgramVisitor.getJassNativeManager().createNative("GetRectMinX", (arguments, globalScope, triggerScope) -> { - final Rectangle rect = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); + final CRect rect = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); return RealJassValue.of(rect.getX()); }); jassProgramVisitor.getJassNativeManager().createNative("GetRectMinY", (arguments, globalScope, triggerScope) -> { - final Rectangle rect = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); + final CRect rect = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); return RealJassValue.of(rect.getY()); }); jassProgramVisitor.getJassNativeManager().createNative("GetRectMaxX", (arguments, globalScope, triggerScope) -> { - final Rectangle rect = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); + final CRect rect = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); return RealJassValue.of(rect.getX() + rect.getWidth()); }); jassProgramVisitor.getJassNativeManager().createNative("GetRectMaxY", (arguments, globalScope, triggerScope) -> { - final Rectangle rect = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); + final CRect rect = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); return RealJassValue.of(rect.getY() + rect.getHeight()); }); jassProgramVisitor.getJassNativeManager().createNative("CreateRegion", @@ -1803,14 +1804,14 @@ public JassValue call(final List arguments, final GlobalScope globalS jassProgramVisitor.getJassNativeManager().createNative("RegionAddRect", (arguments, globalScope, triggerScope) -> { final CRegion region = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); - final Rectangle rect = arguments.get(1).visit(ObjectJassValueVisitor.getInstance()); + final CRect rect = arguments.get(1).visit(ObjectJassValueVisitor.getInstance()); region.addRect(rect, CommonEnvironment.this.simulation.getRegionManager()); return null; }); jassProgramVisitor.getJassNativeManager().createNative("RegionClearRect", (arguments, globalScope, triggerScope) -> { final CRegion region = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); - final Rectangle rect = arguments.get(1).visit(ObjectJassValueVisitor.getInstance()); + final CRect rect = arguments.get(1).visit(ObjectJassValueVisitor.getInstance()); region.clearRect(rect, CommonEnvironment.this.simulation.getRegionManager()); return null; }); @@ -1932,7 +1933,7 @@ public JassValue call(final List arguments, final GlobalScope globalS final float worldMaxY = CommonEnvironment.this.simulation.getPathingGrid() .getWorldY(CommonEnvironment.this.simulation.getPathingGrid().getHeight() - 1) + 16f; return new HandleJassValue(rectType, - new Rectangle(worldMinX, worldMinY, worldMaxX - worldMinX, worldMaxY - worldMinY)); + new CRect(this.simulation.getHandleIdAllocator().createId(), worldMinX, worldMinY, worldMaxX - worldMinX, worldMaxY - worldMinY)); }); // ============================================================================ // Native trigger interface diff --git a/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/rect/CRect.java b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/rect/CRect.java new file mode 100644 index 000000000..5a2200247 --- /dev/null +++ b/core/src/com/etheller/warsmash/viewer5/handlers/w3x/simulation/rect/CRect.java @@ -0,0 +1,18 @@ +package com.etheller.warsmash.viewer5.handlers.w3x.simulation.rect; + +import com.badlogic.gdx.math.Rectangle; +import com.etheller.interpreter.ast.util.CHandle; + +public class CRect extends Rectangle implements CHandle { + private final int handleId; + + public CRect(int handleId, float x, float y, float width, float height) { + super(x, y, width, height); + this.handleId = handleId; + } + + @Override + public int getHandleId() { + return handleId; + } +} From 012ff44f28a160b1de27d6f306cfb67a01c96f03 Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Fri, 15 May 2026 19:57:15 +0200 Subject: [PATCH 38/38] nullableWithWarning to show warnings in log for null parameters --- .../etheller/warsmash/parsers/jass/Jass2.java | 157 +++++++++++------- .../interpreter/ast/debug/JassException.java | 2 +- 2 files changed, 99 insertions(+), 60 deletions(-) diff --git a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java index b464f72b6..d083ae89f 100644 --- a/core/src/com/etheller/warsmash/parsers/jass/Jass2.java +++ b/core/src/com/etheller/warsmash/parsers/jass/Jass2.java @@ -794,13 +794,13 @@ private CommonEnvironment(final JassProgram jassProgramVisitor, final DataSource jassProgramVisitor.getJassNativeManager().createNative("GetUnitName", (arguments, globalScope, triggerScope) -> { - final CUnit whichWidget = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); + final CUnit whichWidget = nullableWithWarning(arguments, 0, ObjectJassValueVisitor.getInstance(), globalScope, triggerScope); return whichWidget == null ? JassType.STRING.getNullValue() : new StringJassValue(whichWidget.getName()); }); jassProgramVisitor.getJassNativeManager().createNative("BlzSetUnitName", (arguments, globalScope, triggerScope) -> { - final CUnit whichWidget = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); + final CUnit whichWidget = nullableWithWarning(arguments, 0, ObjectJassValueVisitor.getInstance(), globalScope, triggerScope); if (whichWidget != null) { final String name = nullable(arguments, 1, ObjectJassValueVisitor.getInstance()); if (name != null) { @@ -1698,51 +1698,59 @@ public boolean call(final CUnit unit) { }); jassProgramVisitor.getJassNativeManager().createNative("RemoveRect", (arguments, globalScope, triggerScope) -> { - final CRect rect = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); + final CRect rect = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); System.err.println( "RemoveRect called but in Java we don't have a destructor, so we need to unregister later when that is implemented"); return null; }); jassProgramVisitor.getJassNativeManager().createNative("SetRect", (arguments, globalScope, triggerScope) -> { - final CRect rect = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); - final float minx = arguments.get(1).visit(RealJassValueVisitor.getInstance()).floatValue(); - final float miny = arguments.get(2).visit(RealJassValueVisitor.getInstance()).floatValue(); - final float maxx = arguments.get(3).visit(RealJassValueVisitor.getInstance()).floatValue(); - final float maxy = arguments.get(4).visit(RealJassValueVisitor.getInstance()).floatValue(); - rect.set(minx, miny, maxx - minx, maxy - miny); + final CRect rect = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); + if (rect != null) { + final float minx = arguments.get(1).visit(RealJassValueVisitor.getInstance()).floatValue(); + final float miny = arguments.get(2).visit(RealJassValueVisitor.getInstance()).floatValue(); + final float maxx = arguments.get(3).visit(RealJassValueVisitor.getInstance()).floatValue(); + final float maxy = arguments.get(4).visit(RealJassValueVisitor.getInstance()).floatValue(); + rect.set(minx, miny, maxx - minx, maxy - miny); + } return null; }); jassProgramVisitor.getJassNativeManager().createNative("SetRectFromLoc", (arguments, globalScope, triggerScope) -> { - final CRect rect = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); - final AbilityPointTarget min = arguments.get(1) - .visit(ObjectJassValueVisitor.getInstance()); - final AbilityPointTarget max = arguments.get(2) - .visit(ObjectJassValueVisitor.getInstance()); - final float minx = min.x; - final float miny = min.y; - final float maxx = max.x; - final float maxy = max.y; - rect.set(minx, miny, maxx - minx, maxy - miny); + final CRect rect = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); + if (rect != null) { + final AbilityPointTarget min = arguments.get(1) + .visit(ObjectJassValueVisitor.getInstance()); + final AbilityPointTarget max = arguments.get(2) + .visit(ObjectJassValueVisitor.getInstance()); + final float minx = min.x; + final float miny = min.y; + final float maxx = max.x; + final float maxy = max.y; + rect.set(minx, miny, maxx - minx, maxy - miny); + } return null; }); jassProgramVisitor.getJassNativeManager().createNative("MoveRectTo", (arguments, globalScope, triggerScope) -> { - final CRect rect = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); - final float newCenterX = arguments.get(1).visit(RealJassValueVisitor.getInstance()) - .floatValue(); - final float newCenterY = arguments.get(2).visit(RealJassValueVisitor.getInstance()) - .floatValue(); - rect.setCenter(newCenterX, newCenterY); + final CRect rect = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); + if (rect != null) { + final float newCenterX = arguments.get(1).visit(RealJassValueVisitor.getInstance()) + .floatValue(); + final float newCenterY = arguments.get(2).visit(RealJassValueVisitor.getInstance()) + .floatValue(); + rect.setCenter(newCenterX, newCenterY); + } return null; }); jassProgramVisitor.getJassNativeManager().createNative("MoveRectToLoc", (arguments, globalScope, triggerScope) -> { - final CRect rect = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); - final AbilityPointTarget newCenterLoc = arguments.get(1) - .visit(ObjectJassValueVisitor.getInstance()); - rect.setCenter(newCenterLoc.x, newCenterLoc.y); + final CRect rect = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); + if (rect != null) { + final AbilityPointTarget newCenterLoc = arguments.get(1) + .visit(ObjectJassValueVisitor.getInstance()); + rect.setCenter(newCenterLoc.x, newCenterLoc.y); + } return null; }); jassProgramVisitor.getJassNativeManager().createNative("GetRectCenterX", new JassFunction() { @@ -1751,7 +1759,7 @@ public boolean call(final CUnit unit) { @Override public JassValue call(final List arguments, final GlobalScope globalScope, final TriggerExecutionScope triggerScope) { - final CRect rect = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); + final CRect rect = nullableWithWarning(arguments, 0, ObjectJassValueVisitor.getInstance(), globalScope, triggerScope); if (rect == null) { return RealJassValue.ZERO; } @@ -1764,7 +1772,7 @@ public JassValue call(final List arguments, final GlobalScope globalS @Override public JassValue call(final List arguments, final GlobalScope globalScope, final TriggerExecutionScope triggerScope) { - final CRect rect = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); + final CRect rect = nullableWithWarning(arguments, 0, ObjectJassValueVisitor.getInstance(), globalScope, triggerScope); if (rect == null) { return RealJassValue.ZERO; } @@ -1773,23 +1781,35 @@ public JassValue call(final List arguments, final GlobalScope globalS }); jassProgramVisitor.getJassNativeManager().createNative("GetRectMinX", (arguments, globalScope, triggerScope) -> { - final CRect rect = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); - return RealJassValue.of(rect.getX()); + final CRect rect = nullableWithWarning(arguments, 0, ObjectJassValueVisitor.getInstance(), globalScope, triggerScope); + if (rect != null) { + return RealJassValue.of(rect.getX()); + } + return RealJassValue.ZERO; }); jassProgramVisitor.getJassNativeManager().createNative("GetRectMinY", (arguments, globalScope, triggerScope) -> { - final CRect rect = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); - return RealJassValue.of(rect.getY()); + final CRect rect = nullableWithWarning(arguments, 0, ObjectJassValueVisitor.getInstance(), globalScope, triggerScope); + if (rect != null) { + return RealJassValue.of(rect.getY()); + } + return RealJassValue.ZERO; }); jassProgramVisitor.getJassNativeManager().createNative("GetRectMaxX", (arguments, globalScope, triggerScope) -> { - final CRect rect = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); - return RealJassValue.of(rect.getX() + rect.getWidth()); + final CRect rect = nullableWithWarning(arguments, 0, ObjectJassValueVisitor.getInstance(), globalScope, triggerScope); + if (rect != null) { + return RealJassValue.of(rect.getX() + rect.getWidth()); + } + return RealJassValue.ZERO; }); jassProgramVisitor.getJassNativeManager().createNative("GetRectMaxY", (arguments, globalScope, triggerScope) -> { - final CRect rect = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); - return RealJassValue.of(rect.getY() + rect.getHeight()); + final CRect rect = nullableWithWarning(arguments, 0, ObjectJassValueVisitor.getInstance(), globalScope, triggerScope); + if (rect != null) { + return RealJassValue.of(rect.getY() + rect.getHeight()); + } + return RealJassValue.ZERO; }); jassProgramVisitor.getJassNativeManager().createNative("CreateRegion", (arguments, globalScope, triggerScope) -> { @@ -1803,16 +1823,20 @@ public JassValue call(final List arguments, final GlobalScope globalS }); jassProgramVisitor.getJassNativeManager().createNative("RegionAddRect", (arguments, globalScope, triggerScope) -> { - final CRegion region = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); - final CRect rect = arguments.get(1).visit(ObjectJassValueVisitor.getInstance()); - region.addRect(rect, CommonEnvironment.this.simulation.getRegionManager()); + final CRegion region = nullableWithWarning(arguments, 0, ObjectJassValueVisitor.getInstance(), globalScope, triggerScope); + final CRect rect = nullableWithWarning(arguments, 1, ObjectJassValueVisitor.getInstance(), globalScope, triggerScope); + if (region != null && rect != null) { + region.addRect(rect, CommonEnvironment.this.simulation.getRegionManager()); + } return null; }); jassProgramVisitor.getJassNativeManager().createNative("RegionClearRect", (arguments, globalScope, triggerScope) -> { - final CRegion region = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); - final CRect rect = arguments.get(1).visit(ObjectJassValueVisitor.getInstance()); - region.clearRect(rect, CommonEnvironment.this.simulation.getRegionManager()); + final CRegion region = nullableWithWarning(arguments, 0, ObjectJassValueVisitor.getInstance(), globalScope, triggerScope); + final CRect rect = nullableWithWarning(arguments, 1, ObjectJassValueVisitor.getInstance(), globalScope, triggerScope); + if (region != null && rect != null) { + region.clearRect(rect, CommonEnvironment.this.simulation.getRegionManager()); + } return null; }); jassProgramVisitor.getJassNativeManager().createNative("RegionAddCell", @@ -3555,7 +3579,7 @@ public void remove() { }); jassProgramVisitor.getJassNativeManager().createNative("GetHeroLevel", (arguments, globalScope, triggerScope) -> { - final CUnit whichUnit = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); + final CUnit whichUnit = nullableWithWarning(arguments, 0, ObjectJassValueVisitor.getInstance(), globalScope, triggerScope); if (whichUnit != null) { final CAbilityHero heroData = whichUnit.getHeroData(); @@ -3569,18 +3593,20 @@ public void remove() { }); jassProgramVisitor.getJassNativeManager().createNative("SetHeroLevel", (arguments, globalScope, triggerScope) -> { - final CUnit whichUnit = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); - final int level = arguments.get(1).visit(IntegerJassValueVisitor.getInstance()); - final boolean fx = arguments.get(2).visit(BooleanJassValueVisitor.getInstance()); - final CAbilityHero heroData = whichUnit.getHeroData(); - if (heroData != null) { - heroData.setHeroLevel(CommonEnvironment.this.simulation, whichUnit, level, fx); + final CUnit whichUnit = nullableWithWarning(arguments, 0, ObjectJassValueVisitor.getInstance(), globalScope, triggerScope); + if (whichUnit != null) { + final int level = arguments.get(1).visit(IntegerJassValueVisitor.getInstance()); + final boolean fx = arguments.get(2).visit(BooleanJassValueVisitor.getInstance()); + final CAbilityHero heroData = whichUnit.getHeroData(); + if (heroData != null) { + heroData.setHeroLevel(CommonEnvironment.this.simulation, whichUnit, level, fx); + } } return null; }); jassProgramVisitor.getJassNativeManager().createNative("GetHeroProperName", (arguments, globalScope, triggerScope) -> { - final CUnit whichUnit = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); + final CUnit whichUnit = nullableWithWarning(arguments, 0, ObjectJassValueVisitor.getInstance(), globalScope, triggerScope); if (whichUnit != null) { final CAbilityHero heroData = whichUnit.getHeroData(); @@ -3594,7 +3620,7 @@ public void remove() { }); jassProgramVisitor.getJassNativeManager().createNative("BlzSetHeroProperName", (arguments, globalScope, triggerScope) -> { - final CUnit whichUnit = nullable(arguments, 0, ObjectJassValueVisitor.getInstance()); + final CUnit whichUnit = nullableWithWarning(arguments, 0, ObjectJassValueVisitor.getInstance(), globalScope, triggerScope); String heroProperName = nullable(arguments, 1, ObjectJassValueVisitor.getInstance()); if (heroProperName == null) { @@ -3612,11 +3638,13 @@ public void remove() { }); jassProgramVisitor.getJassNativeManager().createNative("SelectHeroSkill", (arguments, globalScope, triggerScope) -> { - final CUnit whichUnit = arguments.get(0).visit(ObjectJassValueVisitor.getInstance()); - final int skill = arguments.get(1).visit(IntegerJassValueVisitor.getInstance()); - final CAbilityHero heroData = whichUnit.getHeroData(); - if (heroData != null) { - heroData.selectHeroSkill(this.simulation, whichUnit, new War3ID(skill)); + final CUnit whichUnit = nullableWithWarning(arguments, 0, ObjectJassValueVisitor.getInstance(), globalScope, triggerScope); + if (whichUnit != null) { + final int skill = arguments.get(1).visit(IntegerJassValueVisitor.getInstance()); + final CAbilityHero heroData = whichUnit.getHeroData(); + if (heroData != null) { + heroData.selectHeroSkill(this.simulation, whichUnit, new War3ID(skill)); + } } return null; }); @@ -9703,6 +9731,17 @@ private static T nullable(final List arguments, final int index, return arg.visit(visitor); } + private static T nullableWithWarning(final List arguments, final int index, + final JassValueVisitor visitor, + final GlobalScope globalScope, + final TriggerExecutionScope triggerScope) { + final T arg = nullable(arguments, index, visitor); + if (arg == null) { + System.err.println(JassException.message(globalScope, "Warning: JASS function argument " + index + " is null.")); + } + return arg; + } + private static void doPreloadScript(final DataSource dataSource, final Viewport uiViewport, final Scene uiScene, final War3MapViewer war3MapViewer, final String filename, final WarsmashUI meleeUI, final String[] originalFiles, final JassProgram jassProgramVisitor, final String mainFunction) { diff --git a/jassparser/src/com/etheller/interpreter/ast/debug/JassException.java b/jassparser/src/com/etheller/interpreter/ast/debug/JassException.java index e582c0916..81e16def9 100644 --- a/jassparser/src/com/etheller/interpreter/ast/debug/JassException.java +++ b/jassparser/src/com/etheller/interpreter/ast/debug/JassException.java @@ -10,7 +10,7 @@ public JassException(final GlobalScope globalScope, final String message, final super(message(globalScope, message), javaCause); } - private static String message(final GlobalScope globalScope, final String message) { + public static String message(final GlobalScope globalScope, final String message) { final List stackTrace = globalScope.copyJassStack(); final StringBuilder sb = new StringBuilder(message); for (final JassStackElement element : stackTrace) {