2020-02-11 07:29:55 +00:00
|
|
|
package com.bytezone.diskbrowser.wizardry;
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
import com.bytezone.diskbrowser.applefile.AbstractFile;
|
2022-03-31 02:04:23 +00:00
|
|
|
import com.bytezone.diskbrowser.utilities.Utility;
|
2020-02-11 07:29:55 +00:00
|
|
|
|
|
|
|
// -----------------------------------------------------------------------------------//
|
2022-05-31 07:44:41 +00:00
|
|
|
public abstract class Monster extends AbstractFile
|
2020-02-11 07:29:55 +00:00
|
|
|
// -----------------------------------------------------------------------------------//
|
|
|
|
{
|
2022-05-31 07:44:41 +00:00
|
|
|
public static final String[] monsterClass = { "Fighter", "Mage", "Priest", "Thief", "Midget",
|
|
|
|
"Giant", "Mythical", "Dragon", "Animal", "Were", "Undead", "Demon", "Insect", "Enchanted" };
|
|
|
|
protected final String[] breathValues =
|
|
|
|
{ "None", "Fire", "Frost", "Poison", "Level drain", "Stoning", "Magic" };
|
|
|
|
|
|
|
|
public int monsterID;
|
|
|
|
|
|
|
|
public String genericName;
|
|
|
|
public String genericNamePlural;
|
|
|
|
public String namePlural;
|
|
|
|
|
|
|
|
public Dice groupSize;
|
|
|
|
public Dice hitPoints;
|
|
|
|
int type;
|
|
|
|
public int armourClass;
|
|
|
|
public int recsn;
|
|
|
|
List<Dice> damage = new ArrayList<> ();
|
2022-03-29 08:00:32 +00:00
|
|
|
|
2022-05-31 07:44:41 +00:00
|
|
|
public int mageSpellLevel;
|
|
|
|
public int priestSpellLevel;
|
2022-03-29 08:00:32 +00:00
|
|
|
|
2020-02-11 07:29:55 +00:00
|
|
|
int levelDrain;
|
2022-03-28 03:55:49 +00:00
|
|
|
int healPts;
|
|
|
|
int breathe;
|
|
|
|
int unaffect;
|
2020-02-11 07:29:55 +00:00
|
|
|
int resistance;
|
|
|
|
int abilities;
|
2022-03-31 02:04:23 +00:00
|
|
|
|
2020-02-11 07:29:55 +00:00
|
|
|
// ---------------------------------------------------------------------------------//
|
2022-05-31 07:44:41 +00:00
|
|
|
Monster (String name, byte[] buffer)
|
2020-02-11 07:29:55 +00:00
|
|
|
// ---------------------------------------------------------------------------------//
|
|
|
|
{
|
|
|
|
super (name, buffer);
|
2022-04-06 08:05:37 +00:00
|
|
|
}
|
|
|
|
|
2020-02-11 07:29:55 +00:00
|
|
|
// ---------------------------------------------------------------------------------//
|
|
|
|
@Override
|
|
|
|
public String getText ()
|
|
|
|
// ---------------------------------------------------------------------------------//
|
|
|
|
{
|
|
|
|
StringBuilder text = new StringBuilder ();
|
|
|
|
|
2022-05-31 07:44:41 +00:00
|
|
|
text.append (String.format ("ID .............. %d%n%n", monsterID));
|
|
|
|
text.append (String.format ("Name ............ %s%n", name));
|
|
|
|
text.append (String.format ("Name plural ..... %s%n", namePlural));
|
|
|
|
text.append (String.format ("Generic name .... %s%n", genericName));
|
|
|
|
text.append (String.format ("Generic name pl . %s%n%n", genericNamePlural));
|
2020-02-11 07:29:55 +00:00
|
|
|
|
2022-05-31 07:44:41 +00:00
|
|
|
text.append (String.format ("Type ............ %2d %s%n", type, monsterClass[type]));
|
|
|
|
text.append (String.format ("Armour class .... %d%n", armourClass));
|
|
|
|
text.append (String.format ("Group size ...... %s%n", groupSize));
|
|
|
|
text.append (String.format ("Hit points ...... %s%n%n", hitPoints));
|
2020-02-11 07:29:55 +00:00
|
|
|
|
2022-05-31 07:44:41 +00:00
|
|
|
text.append (String.format ("# damage ........ %d%n", recsn));
|
|
|
|
text.append (String.format ("Damage .......... %s%n%n", getDamage ()));
|
2020-02-11 07:29:55 +00:00
|
|
|
|
2022-05-31 07:44:41 +00:00
|
|
|
text.append (String.format ("Mage level ...... %d%n", mageSpellLevel));
|
|
|
|
text.append (String.format ("Priest level .... %d%n%n", priestSpellLevel));
|
2020-02-11 07:29:55 +00:00
|
|
|
|
2022-05-31 07:44:41 +00:00
|
|
|
text.append (String.format ("Level drain ..... %d%n", levelDrain));
|
|
|
|
text.append (String.format ("Heal pts ........ %d%n", healPts));
|
|
|
|
text.append (String.format ("Breathe ......... %d %s%n", breathe, breathValues[breathe]));
|
|
|
|
text.append (String.format ("Magic resist .... %d%% %n%n", unaffect));
|
2020-02-11 07:29:55 +00:00
|
|
|
|
2022-05-31 07:44:41 +00:00
|
|
|
text.append (
|
|
|
|
String.format ("Resistance ...... %s%n", String.format ("%3d %<02X", resistance)));
|
|
|
|
text.append (String.format ("Abilities ....... %s%n", String.format ("%3d %<02X", abilities)));
|
2020-02-11 07:29:55 +00:00
|
|
|
|
|
|
|
return text.toString ();
|
|
|
|
}
|
|
|
|
|
|
|
|
// ---------------------------------------------------------------------------------//
|
|
|
|
public String getDamage ()
|
|
|
|
// ---------------------------------------------------------------------------------//
|
|
|
|
{
|
|
|
|
StringBuilder text = new StringBuilder ();
|
2022-03-28 03:55:49 +00:00
|
|
|
|
2020-02-11 07:29:55 +00:00
|
|
|
for (Dice d : damage)
|
|
|
|
text.append (d + ", ");
|
2022-03-28 03:55:49 +00:00
|
|
|
|
2022-03-31 02:04:23 +00:00
|
|
|
if (text.length () > 0)
|
|
|
|
{
|
|
|
|
text.deleteCharAt (text.length () - 1);
|
|
|
|
text.deleteCharAt (text.length () - 1);
|
|
|
|
}
|
2022-03-28 03:55:49 +00:00
|
|
|
|
2020-02-11 07:29:55 +00:00
|
|
|
return text.toString ();
|
|
|
|
}
|
|
|
|
|
|
|
|
// ---------------------------------------------------------------------------------//
|
2022-05-31 07:44:41 +00:00
|
|
|
int getWizLong (byte[] buffer, int offset)
|
2020-02-11 07:29:55 +00:00
|
|
|
// ---------------------------------------------------------------------------------//
|
|
|
|
{
|
2022-05-31 07:44:41 +00:00
|
|
|
int low = Utility.getShort (buffer, offset);
|
|
|
|
int mid = Utility.getShort (buffer, offset + 2);
|
|
|
|
int high = Utility.getShort (buffer, offset + 4);
|
2020-02-11 07:29:55 +00:00
|
|
|
|
2022-05-31 07:44:41 +00:00
|
|
|
return high * 100000000 + mid * 10000 + low;
|
2020-02-11 07:29:55 +00:00
|
|
|
}
|
2022-05-31 07:44:41 +00:00
|
|
|
}
|