// Near Infinity - An Infinity Engine Browser and Editor // Copyright (C) 2001 - 2005 Jon Olav Hauglid // See LICENSE.txt for license information package org.infinity.datatype; import java.nio.ByteBuffer; import org.infinity.resource.Profile; import org.infinity.resource.ResourceFactory; import org.infinity.resource.StructEntry; import org.infinity.resource.are.AreResource; import org.infinity.resource.key.BIFFResourceEntry; import org.infinity.resource.key.ResourceEntry; public final class AreResourceRef extends ResourceRef { private final String[] legalBIFs; // BG1: SFXSound.BIF, CRESound.BIF // BG2: AMBSound.BIF 25AmbSnd.BIF // IDW1: SNDgen.BIF eSFXamb.BIF // IDW2: SNDsfx.BIF // PST: sound.BIF public AreResourceRef(ByteBuffer h_buffer, int offset, String name, AreResource are) { this(null, h_buffer, offset, name, are); } public AreResourceRef(StructEntry parent, ByteBuffer h_buffer, int offset, String name, AreResource are) { super(parent, h_buffer, offset, name, "WAV"); ResourceEntry res = ResourceFactory.getResourceEntry(((ResourceRef)are .getAttribute(AreResource.ARE_WED_RESOURCE)).getResourceName()); String wedBIFF = "_dummy"; if (res instanceof BIFFResourceEntry) { wedBIFF = ((BIFFResourceEntry)res).getBIFFEntry().toString(); } if (Profile.getEngine() == Profile.Engine.BG1) { legalBIFs = new String[]{wedBIFF, "data/sfxsound.bif", "data/cresound.bif"}; } else if (Profile.getEngine() == Profile.Engine.BG2) { legalBIFs = new String[]{wedBIFF, "data/ambsound.bif", "data/25ambsnd.bif", "data/sfxsound.bif"}; } else if (Profile.getEngine() == Profile.Engine.IWD) { legalBIFs = new String[]{wedBIFF, "data/sndgen.bif", "data/esfxamb.bif"}; } else if (Profile.getEngine() == Profile.Engine.IWD2) { legalBIFs = new String[]{wedBIFF, "data/sndsfx.bif"}; } else if (Profile.getEngine() == Profile.Engine.PST) { legalBIFs = new String[]{wedBIFF, "sound.bif"}; } else { legalBIFs = new String[]{wedBIFF}; } // ResourceEntry entry = ResourceFactory.getInstance().getResourceEntry(getResourceName()); // if (!isLegalEntry(entry)) { // System.out.println("Illegal: " + entry + " from " + entry.getActualFile()); // System.out.println("In: " + are.getResourceEntry() + " from " + are.getResourceEntry().getActualFile()); // } } @Override public boolean isLegalEntry(ResourceEntry entry) { if (!(entry instanceof BIFFResourceEntry)) return true; if (entry.hasOverride()) return true; String bifName = ((BIFFResourceEntry)entry).getBIFFEntry().toString(); // if (bifName.length() > 8 && bifName.substring(0, 9).equalsIgnoreCase("data/AREA")) // return true; for (final String legalBIF : legalBIFs) { if (bifName.equalsIgnoreCase(legalBIF)) return true; } return false; } }