content: // Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov.
  // Jad home page: http://www.kpdus.com/jad.html
  // Decompiler options: packimports(3) 
  
  public final class ObjectDef {
  
  	public static ObjectDef forID(int i) {
  		for (int j = 0; j < 20; j++) {
  			if (cache[j].type == i) {
  				return cache[j];
  			}
  		}
  
  		cacheIndex = (cacheIndex + 1) % 20;
  		ObjectDef class46 = cache[cacheIndex];
  		stream.currentOffset = streamIndices[i];
  		class46.type = i;
  		class46.setDefaults();
  		class46.readValues(stream);
  		if (i == 6) {
  			class46.actions[1] = "Load";
  			class46.actions[2] = "Pick-up";
  		}
  		switch (i) {
  
  		}
  		return class46;
  	}
  
  	private void setDefaults() {
  		anIntArray773 = null;
  		anIntArray776 = null;
  		name = null;
  		description = null;
  		modifiedModelColors = null;
  		originalModelColors = null;
  		anInt744 = 1;
  		anInt761 = 1;
  		aBoolean767 = true;
  		aBoolean757 = true;
  		hasActions = false;
  		aBoolean762 = false;
  		aBoolean769 = false;
  		aBoolean764 = false;
  		anInt781 = -1;
  		anInt775 = 16;
  		aByte737 = 0;
  		aByte742 = 0;
  		actions = null;
  		anInt746 = -1;
  		anInt758 = -1;
  		aBoolean751 = false;
  		aBoolean779 = true;
  		anInt748 = 128;
  		anInt772 = 128;
  		anInt740 = 128;
  		anInt768 = 0;
  		anInt738 = 0;
  		anInt745 = 0;
  		anInt783 = 0;
  		aBoolean736 = false;
  		aBoolean766 = false;
  		anInt760 = -1;
  		anInt774 = -1;
  		anInt749 = -1;
  		childrenIDs = null;
  	}
  
  	public void method574(OnDemandFetcher class42_sub1) {
  		if (anIntArray773 == null) {
  			return;
  		}
  		for (int element : anIntArray773) {
  			class42_sub1.method560(element & 0xffff, 0);
  		}
  	}
  
  	public static void nullLoader() {
  		mruNodes1 = null;
  		mruNodes2 = null;
  		streamIndices = null;
  		cache = null;
  		stream = null;
  	}
  
  	public static int totalObjects;
  
  	public static void unpackConfig(StreamLoader streamLoader) {
  		stream = new Stream(streamLoader.getDataForName("loc.dat"));
  		Stream stream = new Stream(streamLoader.getDataForName("loc.idx"));
  		totalObjects = stream.readUnsignedWord();
  		streamIndices = new int[totalObjects];
  		int i = 2;
  		for (int j = 0; j < totalObjects; j++) {
  			streamIndices[j] = i;
  			i += stream.readUnsignedWord();
  		}
  
  		cache = new ObjectDef[20];
  		for (int k = 0; k < 20; k++) {
  			cache[k] = new ObjectDef();
  		}
  
  	}
  
  	public boolean method577(int i) {
  		if (anIntArray776 == null) {
  			if (anIntArray773 == null) {
  				return true;
  			}
  			if (i != 10) {
  				return true;
  			}
  			boolean flag1 = true;
  			for (int element : anIntArray773) {
  				flag1 &= Model.method463(element & 0xffff);
  			}
  
  			return flag1;
  		}
  		for (int j = 0; j < anIntArray776.length; j++) {
  			if (anIntArray776[j] == i) {
  				return Model.method463(anIntArray773[j] & 0xffff);
  			}
  		}
  
  		return true;
  	}
  
  	public Model method578(int i, int j, int k, int l, int i1, int j1, int k1) {
  		Model model = method581(i, k1, j);
  		if (model == null) {
  			return null;
  		}
  		if (aBoolean762 || aBoolean769) {
  			model = new Model(aBoolean762, aBoolean769, model);
  		}
  		if (aBoolean762) {
  			int l1 = (k + l + i1 + j1) / 4;
  			for (int i2 = 0; i2 < model.anInt1626; i2++) {
  				int j2 = model.anIntArray1627[i2];
  				int k2 = model.anIntArray1629[i2];
  				int l2 = k + (l - k) * (j2 + 64) / 128;
  				int i3 = j1 + (i1 - j1) * (j2 + 64) / 128;
  				int j3 = l2 + (i3 - l2) * (k2 + 64) / 128;
  				model.anIntArray1628[i2] += j3 - l1;
  			}
  
  			model.method467();
  		}
  		return model;
  	}
  
  	public boolean method579() {
  		if (anIntArray773 == null) {
  			return true;
  		}
  		boolean flag1 = true;
  		for (int element : anIntArray773) {
  			flag1 &= Model.method463(element & 0xffff);
  		}
  		return flag1;
  	}
  
  	public ObjectDef method580() {
  		int i = -1;
  		if (anInt774 != -1) {
  			VarBit varBit = VarBit.cache[anInt774];
  			int j = varBit.anInt648;
  			int k = varBit.anInt649;
  			int l = varBit.anInt650;
  			int i1 = Game.anIntArray1232[l - k];
  			i = clientInstance.variousSettings[j] >> k & i1;
  		} else if (anInt749 != -1) {
  			i = clientInstance.variousSettings[anInt749];
  		}
  		if (i < 0 || i >= childrenIDs.length || childrenIDs[i] == -1) {
  			return null;
  		} else {
  			return forID(childrenIDs[i]);
  		}
  	}
  
  	private Model method581(int j, int k, int l) {
  		Model model = null;
  		long l1;
  		if (anIntArray776 == null) {
  			if (j != 10) {
  				return null;
  			}
  			l1 = (type << 6) + l + ((long) (k + 1) << 32);
  			Model model_1 = (Model) mruNodes2.insertFromCache(l1);
  			if (model_1 != null) {
  				return model_1;
  			}
  			if (anIntArray773 == null) {
  				return null;
  			}
  			boolean flag1 = aBoolean751 ^ l > 3;
  			int k1 = anIntArray773.length;
  			for (int i2 = 0; i2 < k1; i2++) {
  				int l2 = anIntArray773[i2];
  				if (flag1) {
  					l2 += 0x10000;
  				}
  				model = (Model) mruNodes1.insertFromCache(l2);
  				if (model == null) {
  					model = Model.method462(l2 & 0xffff);
  					if (model == null) {
  						return null;
  					}
  					if (flag1) {
  						model.method477();
  					}
  					mruNodes1.removeFromCache(model, l2);
  				}
  				if (k1 > 1) {
  					aModelArray741s[i2] = model;
  				}
  			}
  
  			if (k1 > 1) {
  				model = new Model(k1, aModelArray741s);
  			}
  		} else {
  			int i1 = -1;
  			for (int j1 = 0; j1 < anIntArray776.length; j1++) {
  				if (anIntArray776[j1] != j) {
  					continue;
  				}
  				i1 = j1;
  				break;
  			}
  
  			if (i1 == -1) {
  				return null;
  			}
  			l1 = (type << 6) + (i1 << 3) + l + ((long) (k + 1) << 32);
  			Model model_2 = (Model) mruNodes2.insertFromCache(l1);
  			if (model_2 != null) {
  				return model_2;
  			}
  			int j2 = anIntArray773[i1];
  			boolean flag3 = aBoolean751 ^ l > 3;
  			if (flag3) {
  				j2 += 0x10000;
  			}
  			model = (Model) mruNodes1.insertFromCache(j2);
  			if (model == null) {
  				model = Model.method462(j2 & 0xffff);
  				if (model == null) {
  					return null;
  				}
  				if (flag3) {
  					model.method477();
  				}
  				mruNodes1.removeFromCache(model, j2);
  			}
  		}
  		boolean flag;
  		flag = anInt748 != 128 || anInt772 != 128 || anInt740 != 128;
  		boolean flag2;
  		flag2 = anInt738 != 0 || anInt745 != 0 || anInt783 != 0;
  		Model model_3 = new Model(modifiedModelColors == null, Class36.method532(k), l == 0 && k == -1 && !flag && !flag2, model);
  		if (k != -1) {
  			model_3.method469();
  			model_3.method470(k);
  			model_3.anIntArrayArray1658 = null;
  			model_3.anIntArrayArray1657 = null;
  		}
  		while (l-- > 0) {
  			model_3.method473();
  		}
  		if (modifiedModelColors != null) {
  			for (int k2 = 0; k2 < modifiedModelColors.length; k2++) {
  				model_3.method476(modifiedModelColors[k2], originalModelColors[k2]);
  			}
  
  		}
  		if (flag) {
  			model_3.method478(anInt748, anInt740, anInt772);
  		}
  		if (flag2) {
  			model_3.method475(anInt738, anInt745, anInt783);
  		}
  		model_3.method479(64 + aByte737, 768 + aByte742 * 5, -50, -10, -50, !aBoolean769);
  		if (anInt760 == 1) {
  			model_3.anInt1654 = model_3.modelHeight;
  		}
  		mruNodes2.removeFromCache(model_3, l1);
  		return model_3;
  	}
  
  	private void readValues(Stream stream) {
  		int i = -1;
  		label0 : do {
  			int j;
  			do {
  				j = stream.readUnsignedByte();
  				if (j == 0) {
  					break label0;
  				}
  				if (j == 1) {
  					int k = stream.readUnsignedByte();
  					if (k > 0) {
  						if (anIntArray773 == null || lowMem) {
  							anIntArray776 = new int[k];
  							anIntArray773 = new int[k];
  							for (int k1 = 0; k1 < k; k1++) {
  								anIntArray773[k1] = stream.readUnsignedWord();
  								anIntArray776[k1] = stream.readUnsignedByte();
  							}
  
  						} else {
  							stream.currentOffset += k * 3;
  						}
  					}
  				} else if (j == 2) {
  					name = stream.readString();
  				} else if (j == 3) {
  					description = stream.readBytes();
  				} else if (j == 5) {
  					int l = stream.readUnsignedByte();
  					if (l > 0) {
  						if (anIntArray773 == null || lowMem) {
  							anIntArray776 = null;
  							anIntArray773 = new int[l];
  							for (int l1 = 0; l1 < l; l1++) {
  								anIntArray773[l1] = stream.readUnsignedWord();
  							}
  
  						} else {
  							stream.currentOffset += l * 2;
  						}
  					}
  				} else if (j == 14) {
  					anInt744 = stream.readUnsignedByte();
  				} else if (j == 15) {
  					anInt761 = stream.readUnsignedByte();
  				} else if (j == 17) {
  					aBoolean767 = false;
  				} else if (j == 18) {
  					aBoolean757 = false;
  				} else if (j == 19) {
  					i = stream.readUnsignedByte();
  					if (i == 1) {
  						hasActions = true;
  					}
  				} else if (j == 21) {
  					aBoolean762 = true;
  				} else if (j == 22) {
  					aBoolean769 = true;
  				} else if (j == 23) {
  					aBoolean764 = true;
  				} else if (j == 24) {
  					anInt781 = stream.readUnsignedWord();
  					if (anInt781 == 65535) {
  						anInt781 = -1;
  					}
  				} else if (j == 28) {
  					anInt775 = stream.readUnsignedByte();
  				} else if (j == 29) {
  					aByte737 = stream.readSignedByte();
  				} else if (j == 39) {
  					aByte742 = stream.readSignedByte();
  				} else if (j >= 30 && j < 39) {
  					if (actions == null) {
  						actions = new String[5];
  					}
  					actions[j - 30] = stream.readString();
  					if (actions[j - 30].equalsIgnoreCase("hidden")) {
  						actions[j - 30] = null;
  					}
  				} else if (j == 40) {
  					int i1 = stream.readUnsignedByte();
  					modifiedModelColors = new int[i1];
  					originalModelColors = new int[i1];
  					for (int i2 = 0; i2 < i1; i2++) {
  						modifiedModelColors[i2] = stream.readUnsignedWord();
  						originalModelColors[i2] = stream.readUnsignedWord();
  					}
  
  				} else if (j == 60) {
  					anInt746 = stream.readUnsignedWord();
  				} else if (j == 62) {
  					aBoolean751 = true;
  				} else if (j == 64) {
  					aBoolean779 = false;
  				} else if (j == 65) {
  					anInt748 = stream.readUnsignedWord();
  				} else if (j == 66) {
  					anInt772 = stream.readUnsignedWord();
  				} else if (j == 67) {
  					anInt740 = stream.readUnsignedWord();
  				} else if (j == 68) {
  					anInt758 = stream.readUnsignedWord();
  				} else if (j == 69) {
  					anInt768 = stream.readUnsignedByte();
  				} else if (j == 70) {
  					anInt738 = stream.readSignedWord();
  				} else if (j == 71) {
  					anInt745 = stream.readSignedWord();
  				} else if (j == 72) {
  					anInt783 = stream.readSignedWord();
  				} else if (j == 73) {
  					aBoolean736 = true;
  				} else if (j == 74) {
  					aBoolean766 = true;
  				} else {
  					if (j != 75) {
  						continue;
  					}
  					anInt760 = stream.readUnsignedByte();
  				}
  				continue label0;
  			} while (j != 77);
  			anInt774 = stream.readUnsignedWord();
  			if (anInt774 == 65535) {
  				anInt774 = -1;
  			}
  			anInt749 = stream.readUnsignedWord();
  			if (anInt749 == 65535) {
  				anInt749 = -1;
  			}
  			int j1 = stream.readUnsignedByte();
  			childrenIDs = new int[j1 + 1];
  			for (int j2 = 0; j2 <= j1; j2++) {
  				childrenIDs[j2] = stream.readUnsignedWord();
  				if (childrenIDs[j2] == 65535) {
  					childrenIDs[j2] = -1;
  				}
  			}
  
  		} while (true);
  		if (i == -1) {
  			hasActions = anIntArray773 != null && (anIntArray776 == null || anIntArray776[0] == 10);
  			if (actions != null) {
  				hasActions = true;
  			}
  		}
  		if (aBoolean766) {
  			aBoolean767 = false;
  			aBoolean757 = false;
  		}
  		if (anInt760 == -1) {
  			anInt760 = aBoolean767 ? 1 : 0;
  		}
  	}
  
  	private ObjectDef() {
  		type = -1;
  	}
  
  	public boolean aBoolean736;
  	private byte aByte737;
  	private int anInt738;
  	public String name;
  	private int anInt740;
  	private static final Model[] aModelArray741s = new Model[4];
  	private byte aByte742;
  	public int anInt744;
  	private int anInt745;
  	public int anInt746;
  	private int[] originalModelColors;
  	private int anInt748;
  	public int anInt749;
  	private boolean aBoolean751;
  	public static boolean lowMem;
  	private static Stream stream;
  	public int type;
  	private static int[] streamIndices;
  	public boolean aBoolean757;
  	public int anInt758;
  	public int childrenIDs[];
  	private int anInt760;
  	public int anInt761;
  	public boolean aBoolean762;
  	public boolean aBoolean764;
  	public static Game clientInstance;
  	private boolean aBoolean766;
  	public boolean aBoolean767;
  	public int anInt768;
  	private boolean aBoolean769;
  	private static int cacheIndex;
  	private int anInt772;
  	private int[] anIntArray773;
  	public int anInt774;
  	public int anInt775;
  	private int[] anIntArray776;
  	public byte description[];
  	public boolean hasActions;
  	public boolean aBoolean779;
  	public static MRUNodes mruNodes2 = new MRUNodes(30);
  	public int anInt781;
  	private static ObjectDef[] cache;
  	private int anInt783;
  	private int[] modifiedModelColors;
  	public static MRUNodes mruNodes1 = new MRUNodes(500);
  	public String actions[];
  
  }
  