diff --git a/core/src/com/riiablo/Client.java b/core/src/com/riiablo/Client.java index 8439e5cb..49c46d2f 100644 --- a/core/src/com/riiablo/Client.java +++ b/core/src/com/riiablo/Client.java @@ -235,19 +235,6 @@ public class Client extends Game { } Riiablo.mpqs = mpqs = new MPQFileHandleResolver(); - mpqs.add(home.child("patch_d2.mpq")); - mpqs.add(home.child("d2exp.mpq")); - mpqs.delete("data\\global\\sfx\\Item\\gem.wav"); // workaround for issue #9 - mpqs.add(home.child("d2xmusic.mpq")); - mpqs.add(home.child("d2xtalk.mpq")); - mpqs.add(home.child("d2xvideo.mpq")); - mpqs.add(home.child("d2data.mpq")); - mpqs.add(home.child("d2char.mpq")); - mpqs.add(home.child("d2sfx.mpq")); - mpqs.add(home.child("d2music.mpq")); - mpqs.add(home.child("d2speech.mpq")); - mpqs.add(home.child("d2video.mpq")); - Riiablo.string = string = new StringTBLs(mpqs); Riiablo.assets = assets = new AssetManager(); diff --git a/core/src/com/riiablo/mpq/MPQ.java b/core/src/com/riiablo/mpq/MPQ.java index f5c1051b..155c1e4c 100644 --- a/core/src/com/riiablo/mpq/MPQ.java +++ b/core/src/com/riiablo/mpq/MPQ.java @@ -49,11 +49,6 @@ public class MPQ { return hashTable.contains(fileName); } - public boolean delete(String fileName) { - fileName = fileName.replaceAll("/", "\\\\"); - return hashTable.deleteEntry(fileName); - } - public long length(String fileName) { fileName = fileName.replaceAll("/", "\\\\"); HashTable.Entry entry = hashTable.getEntry(fileName); @@ -243,15 +238,6 @@ public class MPQ { return index != -1 ? entries[index] : null; } - boolean deleteEntry(String file) { - Entry entry = getEntry(file); - System.out.println("deleting entry " + entry); - if (entry == null || entry.blockIndex == Entry.DELETED) return false; - entry.blockIndex = Entry.DELETED; - System.out.println("-> " + entry); - return true; - } - public boolean contains(String file) { return getIndex(File.key(file), File.offset(file), Entry.DEFAULT_LOCALE) != -1; } @@ -290,7 +276,7 @@ public class MPQ { final long key; // QWORD final short locale; // WORD final short platform; // WORD - int blockIndex; // DWORD + final int blockIndex; // DWORD Entry(ByteBuffer in) { key = in.getLong(); diff --git a/core/src/com/riiablo/mpq/MPQFileHandleResolver.java b/core/src/com/riiablo/mpq/MPQFileHandleResolver.java index ea051afa..688975e4 100644 --- a/core/src/com/riiablo/mpq/MPQFileHandleResolver.java +++ b/core/src/com/riiablo/mpq/MPQFileHandleResolver.java @@ -3,6 +3,7 @@ package com.riiablo.mpq; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.assets.loaders.FileHandleResolver; import com.badlogic.gdx.files.FileHandle; +import com.riiablo.Riiablo; import java.util.concurrent.CopyOnWriteArrayList; @@ -10,20 +11,45 @@ public class MPQFileHandleResolver implements FileHandleResolver { private static final String TAG = "MPQFileHandleResolver"; private static final boolean DEBUG = !true; + public final MPQ patch_d2; + public final MPQ d2exp; + public final MPQ d2xmusic; + public final MPQ d2xtalk; + public final MPQ d2xvideo; + public final MPQ d2data; + public final MPQ d2char; + public final MPQ d2sfx; + public final MPQ d2music; + public final MPQ d2speech; + public final MPQ d2video; + + public MPQFileHandleResolver() { + this(Riiablo.home); + } + + public MPQFileHandleResolver(FileHandle home) { + patch_d2 = add(home.child("patch_d2.mpq")); + d2exp = add(home.child("d2exp.mpq")); + d2xmusic = add(home.child("d2xmusic.mpq")); + d2xtalk = add(home.child("d2xtalk.mpq")); + d2xvideo = add(home.child("d2xvideo.mpq")); + d2data = add(home.child("d2data.mpq")); + d2char = add(home.child("d2char.mpq")); + d2sfx = add(home.child("d2sfx.mpq")); + d2music = add(home.child("d2music.mpq")); + d2speech = add(home.child("d2speech.mpq")); + d2video = add(home.child("d2video.mpq")); + } + private final CopyOnWriteArrayList mpqs = new CopyOnWriteArrayList<>(); - public void add(MPQ mpq) { + public MPQ add(MPQ mpq) { mpqs.add(mpq); + return mpq; } - public void add(FileHandle file) { - add(MPQ.loadFromFile(file)); - } - - public boolean delete(String fileName) { - boolean deleted = false; - for (MPQ mpq : mpqs) deleted = mpq.delete(fileName); - return deleted; + public MPQ add(FileHandle file) { + return add(MPQ.loadFromFile(file)); } public boolean contains(String fileName) { @@ -40,6 +66,10 @@ public class MPQFileHandleResolver implements FileHandleResolver { public FileHandle resolve(String fileName) { if (DEBUG) Gdx.app.debug(TAG, "Resolving " + fileName); if (fileName == null) return null; + if (fileName.endsWith("gem.wav")) { + return new MPQFileHandle(d2sfx, fileName); + } + for (MPQ mpq : mpqs) { if (mpq.contains(fileName)) { if (DEBUG) Gdx.app.debug(TAG, fileName + " found in " + mpq);