// Near Infinity - An Infinity Engine Browser and Editor // Copyright (C) 2001 - 2005 Jon Olav Hauglid // See LICENSE.txt for license information package org.infinity.resource.are; import java.nio.ByteBuffer; import org.infinity.datatype.Bitmap; import org.infinity.datatype.DecNumber; import org.infinity.datatype.SpawnResourceRef; import org.infinity.datatype.StringRef; import org.infinity.datatype.TextString; import org.infinity.datatype.Unknown; import org.infinity.resource.AbstractStruct; public final class RestSpawn extends AbstractStruct { // ARE/Rest Encounters-specific field labels public static final String ARE_RESTSPAWN = "Rest encounters"; public static final String ARE_RESTSPAWN_NAME = "Name"; public static final String ARE_RESTSPAWN_CREATURE_STRING_FMT = "Creature %d string"; public static final String ARE_RESTSPAWN_CREATURE_FMT = "Creature %d"; public static final String ARE_RESTSPAWN_NUM_CREATURES = "# creatures"; public static final String ARE_RESTSPAWN_ENCOUNTER_DIFFICULTY = "Encounter difficulty"; public static final String ARE_RESTSPAWN_DURATION = "Creature duration"; public static final String ARE_RESTSPAWN_WANDER_DISTANCE = "Creature wander distance"; public static final String ARE_RESTSPAWN_FOLLOW_DISTANCE = "Creature follow distance"; public static final String ARE_RESTSPAWN_MAX_CREATURES = "Maximum spawned creatures"; public static final String ARE_RESTSPAWN_ACTIVE = "Is active?"; public static final String ARE_RESTSPAWN_PROBABILITY_DAY = "Probability (day)"; public static final String ARE_RESTSPAWN_PROBABILITY_NIGHT = "Probability (night)"; RestSpawn(AbstractStruct superStruct, ByteBuffer buffer, int offset) throws Exception { super(superStruct, ARE_RESTSPAWN, buffer, offset); } @Override public int read(ByteBuffer buffer, int offset) throws Exception { addField(new TextString(buffer, offset, 32, ARE_RESTSPAWN_NAME)); for (int i = 0; i < 10; i++) { addField(new StringRef(buffer, offset + 32 + (i * 4), String.format(ARE_RESTSPAWN_CREATURE_STRING_FMT, i+1))); } for (int i = 0; i < 10; i++) { addField(new SpawnResourceRef(buffer, offset + 72 + i * 8, String.format(ARE_RESTSPAWN_CREATURE_FMT, i+1))); } addField(new DecNumber(buffer, offset + 152, 2, ARE_RESTSPAWN_NUM_CREATURES)); addField(new DecNumber(buffer, offset + 154, 2, ARE_RESTSPAWN_ENCOUNTER_DIFFICULTY)); addField(new DecNumber(buffer, offset + 156, 4, ARE_RESTSPAWN_DURATION)); addField(new DecNumber(buffer, offset + 160, 2, ARE_RESTSPAWN_WANDER_DISTANCE)); addField(new DecNumber(buffer, offset + 162, 2, ARE_RESTSPAWN_FOLLOW_DISTANCE)); addField(new DecNumber(buffer, offset + 164, 2, ARE_RESTSPAWN_MAX_CREATURES)); addField(new Bitmap(buffer, offset + 166, 2, ARE_RESTSPAWN_ACTIVE, new String[]{"No", "Yes"})); addField(new DecNumber(buffer, offset + 168, 2, ARE_RESTSPAWN_PROBABILITY_DAY)); addField(new DecNumber(buffer, offset + 170, 2, ARE_RESTSPAWN_PROBABILITY_NIGHT)); addField(new Unknown(buffer, offset + 172, 56)); return offset + 228; } }