mirror of
https://github.com/collinsmith/riiablo.git
synced 2025-02-21 20:18:14 +07:00
Cleaned up workaround for issue #9
Changed blockIndex back to final Removed ability to mark blocks as deleted Moved mpqs to MPQFileHandleResolver Added public final references to individual mpqs Forced gem.wav to resolve to d2sfx manually These changes will have a lower impact when pkexplode eventually gets fixed
This commit is contained in:
parent
8eb19c2063
commit
395e0274b8
@ -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();
|
||||
|
@ -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();
|
||||
|
@ -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<MPQ> 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);
|
||||
|
Loading…
Reference in New Issue
Block a user