From 5f29cfcd09614f403d3f8376e4511f8ef699c0f1 Mon Sep 17 00:00:00 2001 From: Denis Molony Date: Sat, 24 Jul 2021 18:08:40 +1000 Subject: [PATCH] removed protected from AbstractFile.name --- .../diskbrowser/applefile/AbstractFile.java | 9 +- .../appleworks/AppleworksWPFile.java | 2 +- src/com/bytezone/diskbrowser/cpm/CPMDisk.java | 2 + .../diskbrowser/disk/DiskFactory.java | 6 +- .../bytezone/diskbrowser/infocom/ZObject.java | 22 +- .../diskbrowser/wizardry/Character.java | 8 +- .../bytezone/diskbrowser/wizardry/Item.java | 7 +- .../wizardry/MessageDataBlock.java | 3 +- .../diskbrowser/wizardry/Monster.java | 2 +- .../bytezone/diskbrowser/wizardry/Spell.java | 362 +++++++++--------- 10 files changed, 214 insertions(+), 209 deletions(-) diff --git a/src/com/bytezone/diskbrowser/applefile/AbstractFile.java b/src/com/bytezone/diskbrowser/applefile/AbstractFile.java index 6e876d0..4874d3d 100755 --- a/src/com/bytezone/diskbrowser/applefile/AbstractFile.java +++ b/src/com/bytezone/diskbrowser/applefile/AbstractFile.java @@ -15,7 +15,7 @@ public abstract class AbstractFile implements DataSource { static boolean showDebugText; - protected String name; + String name; public byte[] buffer; AssemblerProgram assembler; protected BufferedImage image; @@ -30,6 +30,13 @@ public abstract class AbstractFile implements DataSource this.buffer = buffer; } + // ---------------------------------------------------------------------------------// + public void setName (String name) + // ---------------------------------------------------------------------------------// + { + this.name = name; // Infocom ZObject uses this - but it sucks + } + // ---------------------------------------------------------------------------------// @Override public String getText () // Override this to get a tailored text representation diff --git a/src/com/bytezone/diskbrowser/appleworks/AppleworksWPFile.java b/src/com/bytezone/diskbrowser/appleworks/AppleworksWPFile.java index dbc7295..4a1942d 100755 --- a/src/com/bytezone/diskbrowser/appleworks/AppleworksWPFile.java +++ b/src/com/bytezone/diskbrowser/appleworks/AppleworksWPFile.java @@ -139,7 +139,7 @@ public class AppleworksWPFile extends AbstractFile break; default: - System.out.printf ("Unknown value in %s: %02X %02X%n", name, b1, b2); + System.out.printf ("Unknown value in %s: %02X %02X%n", getName (), b1, b2); } ptr += 2; } diff --git a/src/com/bytezone/diskbrowser/cpm/CPMDisk.java b/src/com/bytezone/diskbrowser/cpm/CPMDisk.java index f222a12..6340192 100644 --- a/src/com/bytezone/diskbrowser/cpm/CPMDisk.java +++ b/src/com/bytezone/diskbrowser/cpm/CPMDisk.java @@ -13,6 +13,7 @@ import com.bytezone.diskbrowser.disk.Disk; import com.bytezone.diskbrowser.disk.DiskAddress; import com.bytezone.diskbrowser.disk.SectorType; import com.bytezone.diskbrowser.gui.DataSource; +import com.bytezone.diskbrowser.utilities.HexFormatter; // -----------------------------------------------------------------------------------// public class CPMDisk extends AbstractFormattedDisk @@ -228,6 +229,7 @@ public class CPMDisk extends AbstractFormattedDisk for (int sector = 0; sector < 8; sector++) { byte[] buffer = disk.readBlock (3, sector); + System.out.println (HexFormatter.format (buffer)); // check if entire sector is empty (everything == 0xE5) if (bufferContainsAll (buffer, (byte) EMPTY_BYTE_VALUE)) diff --git a/src/com/bytezone/diskbrowser/disk/DiskFactory.java b/src/com/bytezone/diskbrowser/disk/DiskFactory.java index 13a7b8d..56e304c 100755 --- a/src/com/bytezone/diskbrowser/disk/DiskFactory.java +++ b/src/com/bytezone/diskbrowser/disk/DiskFactory.java @@ -556,9 +556,6 @@ public class DiskFactory if (disk == null) disk = checkPascalDisk (appleDisk512); - if (disk == null) - disk = checkCPMDisk (appleDisk256); - if (disk == null) { disk2 = checkInfocomDisk (appleDisk256); @@ -566,6 +563,9 @@ public class DiskFactory disk = disk2; } + if (disk == null) + disk = checkCPMDisk (appleDisk256); // checks almost nothing + if (disk == null) disk = new DataDisk (appleDisk256); diff --git a/src/com/bytezone/diskbrowser/infocom/ZObject.java b/src/com/bytezone/diskbrowser/infocom/ZObject.java index 077bb96..7a4a87e 100755 --- a/src/com/bytezone/diskbrowser/infocom/ZObject.java +++ b/src/com/bytezone/diskbrowser/infocom/ZObject.java @@ -57,7 +57,9 @@ class ZObject extends AbstractFile implements Comparable propertyTablePtr = header.getWord (offset + 7); int ptr = propertyTablePtr; int nameLength = header.getByte (ptr) * 2; - this.name = nameLength == 0 ? "<<" + id + ">>" : new ZString (header, ++ptr).value; + System.out.printf ("was %s%n", this.getName ()); + setName (nameLength == 0 ? "<<" + id + ">>" : new ZString (header, ++ptr).value); + System.out.printf ("now %s%n", this.getName ()); ptr += nameLength; // read each property @@ -84,11 +86,11 @@ class ZObject extends AbstractFile implements Comparable { StringBuilder text = new StringBuilder (); - text.append (String.format ("ID : %02X (%<3d) %s%n%n", id, name)); + text.append (String.format ("ID : %02X (%<3d) %s%n%n", id, getName ())); - String obj1 = parent == 0 ? "" : header.getObject (parent - 1).name; - String obj2 = sibling == 0 ? "" : header.getObject (sibling - 1).name; - String obj3 = child == 0 ? "" : header.getObject (child - 1).name; + String obj1 = parent == 0 ? "" : header.getObject (parent - 1).getName (); + String obj2 = sibling == 0 ? "" : header.getObject (sibling - 1).getName (); + String obj3 = child == 0 ? "" : header.getObject (child - 1).getName (); text.append (String.format ("Parent : %02X (%<3d) %s%n", parent, obj1)); text.append (String.format ("Sibling : %02X (%<3d) %s%n", sibling, obj2)); @@ -132,7 +134,7 @@ class ZObject extends AbstractFile implements Comparable public String toString () // ---------------------------------------------------------------------------------// { - return HexFormatter.getHexString (buffer, startPtr, HEADER_SIZE) + " " + name; + return HexFormatter.getHexString (buffer, startPtr, HEADER_SIZE) + " " + getName (); } // ---------------------------------------------------------------------------------// @@ -200,7 +202,7 @@ class ZObject extends AbstractFile implements Comparable if (propertyNumber >= 19) // directions { ZObject object = getObject (); - String objectName = object == null ? "no object" : object.name; + String objectName = object == null ? "no object" : object.getName (); switch (length) { @@ -271,8 +273,8 @@ class ZObject extends AbstractFile implements Comparable for (int i = 0; i < length; i++) { int objectId = header.getByte (ptr + i + 1); - text.append ( - String.format ("%s%s", (i == 0 ? "" : ", "), getObject (objectId).name)); + text.append (String.format ("%s%s", (i == 0 ? "" : ", "), + getObject (objectId).getName ())); } } // else @@ -296,6 +298,6 @@ class ZObject extends AbstractFile implements Comparable public int compareTo (ZObject o) // ---------------------------------------------------------------------------------// { - return this.name.compareTo (o.name); + return this.getName ().compareTo (o.getName ()); } } \ No newline at end of file diff --git a/src/com/bytezone/diskbrowser/wizardry/Character.java b/src/com/bytezone/diskbrowser/wizardry/Character.java index aa316ef..bf10501 100755 --- a/src/com/bytezone/diskbrowser/wizardry/Character.java +++ b/src/com/bytezone/diskbrowser/wizardry/Character.java @@ -104,7 +104,7 @@ class Character extends AbstractFile item.partyOwns++; } else - System.out.println (name + " ItemID : " + itemID + " is outside range 0:" + System.out.println (getName () + " ItemID : " + itemID + " is outside range 0:" + (itemList.size () - 1)); } } @@ -121,7 +121,7 @@ class Character extends AbstractFile if (index > 0 && index <= spellList.size ()) spellBook.add (spellList.get (index - 1)); else - System.out.println ("LinkSpell: " + name + " SpellID : " + index + System.out.println ("LinkSpell: " + getName () + " SpellID : " + index + " is outside range 1:" + spellList.size ()); } } @@ -133,7 +133,7 @@ class Character extends AbstractFile { StringBuilder text = new StringBuilder (); - text.append ("Character name ..... " + name); + text.append ("Character name ..... " + getName ()); text.append ("\n\nRace ............... " + stats.race); text.append ("\nType ............... " + stats.type); text.append ("\nAlignment .......... " + stats.alignment); @@ -301,7 +301,7 @@ class Character extends AbstractFile public String toString () // ---------------------------------------------------------------------------------// { - return name; + return getName (); } // ---------------------------------------------------------------------------------// diff --git a/src/com/bytezone/diskbrowser/wizardry/Item.java b/src/com/bytezone/diskbrowser/wizardry/Item.java index ed7736f..bf15f3c 100755 --- a/src/com/bytezone/diskbrowser/wizardry/Item.java +++ b/src/com/bytezone/diskbrowser/wizardry/Item.java @@ -40,7 +40,7 @@ class Item extends AbstractFile implements Comparable { StringBuilder text = new StringBuilder (); - text.append ("Name ......... : " + name); + text.append ("Name ......... : " + getName ()); // int length = HexFormatter.intValue (buffer[16]); text.append ("\nGeneric name . : " + genericName); text.append ("\nType ......... : " + type); @@ -112,7 +112,7 @@ class Item extends AbstractFile implements Comparable // ---------------------------------------------------------------------------------// { StringBuilder line = new StringBuilder (); - line.append (String.format ("%-16s", name)); + line.append (String.format ("%-16s", getName ())); if (buffer[36] == -1) line.append ("(c) "); else @@ -142,7 +142,8 @@ class Item extends AbstractFile implements Comparable public String getDump (int block) // ---------------------------------------------------------------------------------// { - StringBuilder line = new StringBuilder (String.format ("%3d %-16s", itemID, name)); + StringBuilder line = + new StringBuilder (String.format ("%3d %-16s", itemID, getName ())); int lo = block == 0 ? 32 : block == 1 ? 46 : 70; int hi = lo + 24; if (hi > buffer.length) diff --git a/src/com/bytezone/diskbrowser/wizardry/MessageDataBlock.java b/src/com/bytezone/diskbrowser/wizardry/MessageDataBlock.java index 815f667..9e446a5 100644 --- a/src/com/bytezone/diskbrowser/wizardry/MessageDataBlock.java +++ b/src/com/bytezone/diskbrowser/wizardry/MessageDataBlock.java @@ -75,7 +75,8 @@ class MessageDataBlock extends AbstractFile } else lastMessageNo = firstMessageNo; - this.name += " - " + lastMessageNo; +// this.name += " - " + lastMessageNo; + setName (getName () + " - " + lastMessageNo); } // ---------------------------------------------------------------------------------// diff --git a/src/com/bytezone/diskbrowser/wizardry/Monster.java b/src/com/bytezone/diskbrowser/wizardry/Monster.java index 3817abe..c64e410 100755 --- a/src/com/bytezone/diskbrowser/wizardry/Monster.java +++ b/src/com/bytezone/diskbrowser/wizardry/Monster.java @@ -151,7 +151,7 @@ class Monster extends AbstractFile text.append ("\n\nPartner ID ...... " + partnerID); if (partnerOdds > 0) - text.append (" " + monsters.get (partnerID).name); + text.append (" " + monsters.get (partnerID).getName ()); text.append ("\nPartner odds .... " + partnerOdds + "%"); text.append ("\n\nMage level ...... " + mageSpellLevel); diff --git a/src/com/bytezone/diskbrowser/wizardry/Spell.java b/src/com/bytezone/diskbrowser/wizardry/Spell.java index 9b46040..9466a62 100755 --- a/src/com/bytezone/diskbrowser/wizardry/Spell.java +++ b/src/com/bytezone/diskbrowser/wizardry/Spell.java @@ -76,7 +76,7 @@ class Spell extends AbstractFile public String getName () // ---------------------------------------------------------------------------------// { - return name; + return getName (); } // ---------------------------------------------------------------------------------// @@ -165,7 +165,7 @@ class Spell extends AbstractFile text.append (" width=\"100%\">\n"); text.append (" \n Spell name\n"); - text.append (" " + name + "\n \n"); + text.append (" " + getName () + "\n \n"); text.append (" \n Translation\n"); text.append (" " + translation + "\n \n"); @@ -191,7 +191,7 @@ class Spell extends AbstractFile public String toString () // ---------------------------------------------------------------------------------// { - StringBuilder text = new StringBuilder (name); + StringBuilder text = new StringBuilder (getName ()); while (text.length () < 14) text.append (" "); if (spellType == SpellType.PRIEST) @@ -211,198 +211,190 @@ class Spell extends AbstractFile return text.toString (); } - private static String[] spellNames = - { "KALKI", "DIOS", "BADIOS", "MILWA", "PORFIC", "MATU", "CALFO", "MANIFO", - "MONTINO", "LOMILWA", "DIALKO", "LATUMAPIC", "BAMATU", "DIAL", "BADIAL", - "LATUMOFIS", "MAPORFIC", "DIALMA", "BADIALMA", "LITOKAN", "KANDI", "DI", "BADI", - "LORTO", "MADI", "MABADI", "LOKTOFEIT", "MALIKTO", "KADORTO", + private static String[] spellNames = { "KALKI", "DIOS", "BADIOS", "MILWA", "PORFIC", + "MATU", "CALFO", "MANIFO", "MONTINO", "LOMILWA", "DIALKO", "LATUMAPIC", "BAMATU", + "DIAL", "BADIAL", "LATUMOFIS", "MAPORFIC", "DIALMA", "BADIALMA", "LITOKAN", "KANDI", + "DI", "BADI", "LORTO", "MADI", "MABADI", "LOKTOFEIT", "MALIKTO", "KADORTO", - "HALITO", "MOGREF", "KATINO", "DUMAPIC", "DILTO", "SOPIC", "MAHALITO", "MOLITO", - "MORLIS", "DALTO", "LAHALITO", "MAMORLIS", "MAKANITO", "MADALTO", "LAKANITO", - "ZILWAN", "MASOPIC", "HAMAN", "MALOR", "MAHAMAN", "TILTOWAIT" }; + "HALITO", "MOGREF", "KATINO", "DUMAPIC", "DILTO", "SOPIC", "MAHALITO", "MOLITO", + "MORLIS", "DALTO", "LAHALITO", "MAMORLIS", "MAKANITO", "MADALTO", "LAKANITO", + "ZILWAN", "MASOPIC", "HAMAN", "MALOR", "MAHAMAN", "TILTOWAIT" }; - private static String[] translations = - { "Blessings", "Heal", "Harm", "Light", "Shield", "Blessing & zeal", "X-ray vision", - "Statue", "Still air", "More light", "Softness/supple", "Identification", - "Prayer", "Heal (more)", "Hurt (more)", "Cure poison", "Shield (big)", - "Heal (greatly)", "Hurt (greatly)", "Flame tower", "Location", "Life", "Death", - "Blades", "Healing", "Harm (incredibly)", "Recall", "The Word of Death", - "Resurrection", + private static String[] translations = { "Blessings", "Heal", "Harm", "Light", "Shield", + "Blessing & zeal", "X-ray vision", "Statue", "Still air", "More light", + "Softness/supple", "Identification", "Prayer", "Heal (more)", "Hurt (more)", + "Cure poison", "Shield (big)", "Heal (greatly)", "Hurt (greatly)", "Flame tower", + "Location", "Life", "Death", "Blades", "Healing", "Harm (incredibly)", "Recall", + "The Word of Death", "Resurrection", - "Little Fire", "Body Iron", "Bad Air", "Clarity", "Darkness", "Glass", "Big fire", - "Spark storm", "Fear", "Blizzard blast", "Flame storm", "Terror", "Deadly air", - "Frost", "Suffocation", "Dispell", "Big glass", "Change", "Apport", - "Great change", "(untranslatable)" }; + "Little Fire", "Body Iron", "Bad Air", "Clarity", "Darkness", "Glass", "Big fire", + "Spark storm", "Fear", "Blizzard blast", "Flame storm", "Terror", "Deadly air", + "Frost", "Suffocation", "Dispell", "Big glass", "Change", "Apport", "Great change", + "(untranslatable)" }; - private static SpellThrown[] when = - { SpellThrown.COMBAT, SpellThrown.ANY_TIME, SpellThrown.COMBAT, - SpellThrown.ANY_TIME, SpellThrown.COMBAT, SpellThrown.COMBAT, SpellThrown.LOOTING, - SpellThrown.COMBAT, SpellThrown.COMBAT, SpellThrown.ANY_TIME, - SpellThrown.ANY_TIME, SpellThrown.COMBAT, SpellThrown.COMBAT, - SpellThrown.ANY_TIME, SpellThrown.COMBAT, SpellThrown.ANY_TIME, - SpellThrown.ANY_TIME, SpellThrown.ANY_TIME, SpellThrown.COMBAT, - SpellThrown.COMBAT, SpellThrown.CAMP, SpellThrown.CAMP, SpellThrown.COMBAT, - SpellThrown.COMBAT, SpellThrown.ANY_TIME, SpellThrown.COMBAT, SpellThrown.COMBAT, - SpellThrown.COMBAT, SpellThrown.ANY_TIME, + private static SpellThrown[] when = { SpellThrown.COMBAT, SpellThrown.ANY_TIME, + SpellThrown.COMBAT, SpellThrown.ANY_TIME, SpellThrown.COMBAT, SpellThrown.COMBAT, + SpellThrown.LOOTING, SpellThrown.COMBAT, SpellThrown.COMBAT, SpellThrown.ANY_TIME, + SpellThrown.ANY_TIME, SpellThrown.COMBAT, SpellThrown.COMBAT, SpellThrown.ANY_TIME, + SpellThrown.COMBAT, SpellThrown.ANY_TIME, SpellThrown.ANY_TIME, + SpellThrown.ANY_TIME, SpellThrown.COMBAT, SpellThrown.COMBAT, SpellThrown.CAMP, + SpellThrown.CAMP, SpellThrown.COMBAT, SpellThrown.COMBAT, SpellThrown.ANY_TIME, + SpellThrown.COMBAT, SpellThrown.COMBAT, SpellThrown.COMBAT, SpellThrown.ANY_TIME, - SpellThrown.COMBAT, SpellThrown.COMBAT, SpellThrown.COMBAT, SpellThrown.CAMP, - SpellThrown.COMBAT, SpellThrown.COMBAT, SpellThrown.COMBAT, SpellThrown.COMBAT, - SpellThrown.COMBAT, SpellThrown.COMBAT, SpellThrown.COMBAT, SpellThrown.COMBAT, - SpellThrown.COMBAT, SpellThrown.COMBAT, SpellThrown.COMBAT, SpellThrown.COMBAT, - SpellThrown.COMBAT, SpellThrown.COMBAT, SpellThrown.COMBAT_OR_CAMP, - SpellThrown.COMBAT, SpellThrown.COMBAT, }; + SpellThrown.COMBAT, SpellThrown.COMBAT, SpellThrown.COMBAT, SpellThrown.CAMP, + SpellThrown.COMBAT, SpellThrown.COMBAT, SpellThrown.COMBAT, SpellThrown.COMBAT, + SpellThrown.COMBAT, SpellThrown.COMBAT, SpellThrown.COMBAT, SpellThrown.COMBAT, + SpellThrown.COMBAT, SpellThrown.COMBAT, SpellThrown.COMBAT, SpellThrown.COMBAT, + SpellThrown.COMBAT, SpellThrown.COMBAT, SpellThrown.COMBAT_OR_CAMP, + SpellThrown.COMBAT, SpellThrown.COMBAT, }; - private static SpellTarget[] affects = - { SpellTarget.PARTY, SpellTarget.PERSON, SpellTarget.MONSTER, SpellTarget.PARTY, - SpellTarget.CASTER, SpellTarget.PARTY, SpellTarget.CASTER, - SpellTarget.MONSTER_GROUP, SpellTarget.MONSTER_GROUP, SpellTarget.PARTY, - SpellTarget.PERSON, SpellTarget.PARTY, SpellTarget.PARTY, SpellTarget.PERSON, - SpellTarget.MONSTER, SpellTarget.PERSON, SpellTarget.PARTY, SpellTarget.PERSON, - SpellTarget.MONSTER, SpellTarget.PARTY, SpellTarget.PERSON, SpellTarget.PERSON, - SpellTarget.MONSTER, SpellTarget.MONSTER_GROUP, SpellTarget.PERSON, - SpellTarget.MONSTER, SpellTarget.PARTY, SpellTarget.MONSTER_GROUP, - SpellTarget.PERSON, + private static SpellTarget[] affects = { SpellTarget.PARTY, SpellTarget.PERSON, + SpellTarget.MONSTER, SpellTarget.PARTY, SpellTarget.CASTER, SpellTarget.PARTY, + SpellTarget.CASTER, SpellTarget.MONSTER_GROUP, SpellTarget.MONSTER_GROUP, + SpellTarget.PARTY, SpellTarget.PERSON, SpellTarget.PARTY, SpellTarget.PARTY, + SpellTarget.PERSON, SpellTarget.MONSTER, SpellTarget.PERSON, SpellTarget.PARTY, + SpellTarget.PERSON, SpellTarget.MONSTER, SpellTarget.PARTY, SpellTarget.PERSON, + SpellTarget.PERSON, SpellTarget.MONSTER, SpellTarget.MONSTER_GROUP, + SpellTarget.PERSON, SpellTarget.MONSTER, SpellTarget.PARTY, + SpellTarget.MONSTER_GROUP, SpellTarget.PERSON, - SpellTarget.MONSTER, SpellTarget.CASTER, SpellTarget.MONSTER_GROUP, - SpellTarget.NONE, SpellTarget.MONSTER_GROUP, SpellTarget.CASTER, - SpellTarget.MONSTER_GROUP, SpellTarget.MONSTER_GROUP, SpellTarget.MONSTER_GROUP, - SpellTarget.MONSTER_GROUP, SpellTarget.MONSTER_GROUP, SpellTarget.ALL_MONSTERS, - SpellTarget.ALL_MONSTERS, SpellTarget.MONSTER_GROUP, SpellTarget.MONSTER_GROUP, - SpellTarget.MONSTER, SpellTarget.PARTY, SpellTarget.VARIABLE, SpellTarget.PARTY, - SpellTarget.PARTY, SpellTarget.ALL_MONSTERS }; + SpellTarget.MONSTER, SpellTarget.CASTER, SpellTarget.MONSTER_GROUP, + SpellTarget.NONE, SpellTarget.MONSTER_GROUP, SpellTarget.CASTER, + SpellTarget.MONSTER_GROUP, SpellTarget.MONSTER_GROUP, SpellTarget.MONSTER_GROUP, + SpellTarget.MONSTER_GROUP, SpellTarget.MONSTER_GROUP, SpellTarget.ALL_MONSTERS, + SpellTarget.ALL_MONSTERS, SpellTarget.MONSTER_GROUP, SpellTarget.MONSTER_GROUP, + SpellTarget.MONSTER, SpellTarget.PARTY, SpellTarget.VARIABLE, SpellTarget.PARTY, + SpellTarget.PARTY, SpellTarget.ALL_MONSTERS }; - private static String[] descriptions = - { "KALKI reduces the AC of all party members by one, and thus makes" + private static String[] descriptions = { + "KALKI reduces the AC of all party members by one, and thus makes" + " them harder to hit.", - "DIOS restores from one to eight hit points of damage from a party" - + "member. It will not bring dead back to life.", - "BADIOS causes one to eight hit points of damage to a monster, and" - + " may kill it. It is the reverse of dios. Note the BA prefix which" - + " means 'not'.", - "MILWA causes a softly glowing light to follow the party, allowing" - + " them to see further into the maze, and also revealing all secret" - + " doors. See also LOMILWA. This spell lasts only a short while.", - "PORFIC lowers the AC of the caster considerably. The effects last" - + " for the duration of combat.", - "MATU has the same effects as KALKI, but at double the strength.", - "CALFO allows the caster to determine the exact nature of a trap" - + " on a chest 95% of the time.", - "MANIFO causes some of the monsters in a group to become stiff as" - + " statues for one or more melee rounds. The chance of success," - + " and the duration of the effects, depend on the power of the" - + " target monsters.", - "MONTINO causes the air around a group of monsters to stop" - + " transmitting sound. Like MANIFO, only some of the monsters will" - + " be affected, and for varying lengths of time. Monsters and" - + " Party members under the influence of this spell cannot cast" - + " spells, as they cannot utter the spell words!", - "LOMILWA is a MILWA spell with a much longer life span. Note that" - + " when this spell, or MILWA are active, the Q option while" - + " moving through the maze is active. If Q)UICK PLOTTING is on," - + " only the square you are in, and the next two squares, will" - + " plot. Normally you might see five or six squares ahead with" - + " LOMILWA on. Quick Plotting lets you move fast through known" - + " areas. Note that it will be turned off when you enter camp or" - + " combat mode.", - "DIALKO cures paralysis, and removes the effects of MANIFO and" - + " KATINO from one member of the party.", - "LATUMAPIC makes it readily apparent exactly what the opposing" - + " monsters really are.", - "BAMATU has the effects of MATU at twice the effectiveness.", - "DIAL restores two to 16 hit points of damage, and is similar to" + " DIOS.", - "BADIAL causes two to 16 hit points of damage in the same way as" + " BADIOS.", - "LATUMOFIS makes a poisoned person whole and fit again. Note that" - + " poison causes a person to lose hit points steadily during" - + " movement and combat.", - "MAPORFIC is an improved PORFIC, with effects that last for the" - + " entire expedition.", - "DIALMA restores three to 24 hit points.", - "BADIALMA causes three to 24 hit points of damage.", - "LITOKAN causes a pillar of flame to strike a group of monsters," - + " doing three to 24 hits of damage to each. However, as with" - + " many spells that affect entire groups, there is a chance that" - + " individual monsters will be able to avoid or minimise its" - + " effects. And some monsters will be resistant to it.", - "KANDI allows the user to locate characters in the maze. It tells on" - + " which level, and in which rough area the dead one can be found.", - "DI causes a dead person to be resurrected. However, the renewed" - + " character has but one hit point. Also, this spell is not as" - + " effective or as safe as using the Temple.", - "BADI gives the affected monster a coronary attack. It may or may" - + " not cause death to occur.", - "LORTO causes sharp blades to slice through a group, causing six to" - + " 36 points of damage.", - "MADI causes all hit points to be restored and cures any condition" - + " but death.", - "MABADI causes all but one to eight hit points to be removed from" - + " the target.", - "LOKTOFEIT causes all party members to be teleported back to the" - + " castle, minus all their equipment and most of their gold. There" - + " is also a good chance this spell will not function.", - "MALIKTO causes 12 to 72 hit points of damage to all monsters. None" - + " can escape or minimise its effects.", - "KADORTO restores the dead to life as does DI, but also restores all" - + " hit points. However, it has the same drawbacks as the DI spell." - + " KADORTO can be used to resurrect people even if they are ashes.", + "DIOS restores from one to eight hit points of damage from a party" + + "member. It will not bring dead back to life.", + "BADIOS causes one to eight hit points of damage to a monster, and" + + " may kill it. It is the reverse of dios. Note the BA prefix which" + + " means 'not'.", + "MILWA causes a softly glowing light to follow the party, allowing" + + " them to see further into the maze, and also revealing all secret" + + " doors. See also LOMILWA. This spell lasts only a short while.", + "PORFIC lowers the AC of the caster considerably. The effects last" + + " for the duration of combat.", + "MATU has the same effects as KALKI, but at double the strength.", + "CALFO allows the caster to determine the exact nature of a trap" + + " on a chest 95% of the time.", + "MANIFO causes some of the monsters in a group to become stiff as" + + " statues for one or more melee rounds. The chance of success," + + " and the duration of the effects, depend on the power of the" + + " target monsters.", + "MONTINO causes the air around a group of monsters to stop" + + " transmitting sound. Like MANIFO, only some of the monsters will" + + " be affected, and for varying lengths of time. Monsters and" + + " Party members under the influence of this spell cannot cast" + + " spells, as they cannot utter the spell words!", + "LOMILWA is a MILWA spell with a much longer life span. Note that" + + " when this spell, or MILWA are active, the Q option while" + + " moving through the maze is active. If Q)UICK PLOTTING is on," + + " only the square you are in, and the next two squares, will" + + " plot. Normally you might see five or six squares ahead with" + + " LOMILWA on. Quick Plotting lets you move fast through known" + + " areas. Note that it will be turned off when you enter camp or" + + " combat mode.", + "DIALKO cures paralysis, and removes the effects of MANIFO and" + + " KATINO from one member of the party.", + "LATUMAPIC makes it readily apparent exactly what the opposing" + + " monsters really are.", + "BAMATU has the effects of MATU at twice the effectiveness.", + "DIAL restores two to 16 hit points of damage, and is similar to" + " DIOS.", + "BADIAL causes two to 16 hit points of damage in the same way as" + " BADIOS.", + "LATUMOFIS makes a poisoned person whole and fit again. Note that" + + " poison causes a person to lose hit points steadily during" + + " movement and combat.", + "MAPORFIC is an improved PORFIC, with effects that last for the" + + " entire expedition.", + "DIALMA restores three to 24 hit points.", + "BADIALMA causes three to 24 hit points of damage.", + "LITOKAN causes a pillar of flame to strike a group of monsters," + + " doing three to 24 hits of damage to each. However, as with" + + " many spells that affect entire groups, there is a chance that" + + " individual monsters will be able to avoid or minimise its" + + " effects. And some monsters will be resistant to it.", + "KANDI allows the user to locate characters in the maze. It tells on" + + " which level, and in which rough area the dead one can be found.", + "DI causes a dead person to be resurrected. However, the renewed" + + " character has but one hit point. Also, this spell is not as" + + " effective or as safe as using the Temple.", + "BADI gives the affected monster a coronary attack. It may or may" + + " not cause death to occur.", + "LORTO causes sharp blades to slice through a group, causing six to" + + " 36 points of damage.", + "MADI causes all hit points to be restored and cures any condition" + " but death.", + "MABADI causes all but one to eight hit points to be removed from" + " the target.", + "LOKTOFEIT causes all party members to be teleported back to the" + + " castle, minus all their equipment and most of their gold. There" + + " is also a good chance this spell will not function.", + "MALIKTO causes 12 to 72 hit points of damage to all monsters. None" + + " can escape or minimise its effects.", + "KADORTO restores the dead to life as does DI, but also restores all" + + " hit points. However, it has the same drawbacks as the DI spell." + + " KADORTO can be used to resurrect people even if they are ashes.", - "HALITO causes a flame ball the size of a baseball to hit a monster," - + " doing from one to eight points of damage.", - "MOGREF reduces the caster's AC by two. The effect lasts the entire" - + " encounter.", - "KATINO causes most of the monsters in a group to fall asleep." - + " Katino only effects normal, animal or humanoid monsters. The" - + " chance of the spell affecting an individual monster, and the" - + " duration of the effect, is inversely proportional to the power" - + " of the monster. While asleep, monsters are easier to hit and" - + " successful strikes do double damage.", - "DUMAPIC informs you of the party's exact displacement from the" - + " stairs to the castle, vertically, and North and East, and also" - + " tells you what direction you are facing.", + "HALITO causes a flame ball the size of a baseball to hit a monster," + + " doing from one to eight points of damage.", + "MOGREF reduces the caster's AC by two. The effect lasts the entire" + + " encounter.", + "KATINO causes most of the monsters in a group to fall asleep." + + " Katino only effects normal, animal or humanoid monsters. The" + + " chance of the spell affecting an individual monster, and the" + + " duration of the effect, is inversely proportional to the power" + + " of the monster. While asleep, monsters are easier to hit and" + + " successful strikes do double damage.", + "DUMAPIC informs you of the party's exact displacement from the" + + " stairs to the castle, vertically, and North and East, and also" + + " tells you what direction you are facing.", - "DILTO causes one group of monsters to be enveloped in darkness," - + " which reduces their ability to defend against your attacks.", - "SOPIC causes the caster to become transparent. This means that" - + " he is harder to see, and thus his AC is reduced by four.", + "DILTO causes one group of monsters to be enveloped in darkness," + + " which reduces their ability to defend against your attacks.", + "SOPIC causes the caster to become transparent. This means that" + + " he is harder to see, and thus his AC is reduced by four.", - "MAHALITO causes a fiery explosion in a monster group, doing four" - + " to 24 hit points of damage. As with other similar spells," - + " monsters may be able to minimise the damage done.", - "MOLITO causes sparks to fly out and damage about half of the" - + " monsters in a group. Three to 18 hit points of damage are done" - + " with no chance of avoiding the sparks.", - "MORLIS causes one group of monsters to fear the party greatly. The" - + " effects are the same as a double strength DILTO spell.", - "DALTO is similar to MAHALITO except that cold replaces flames." - + " Also, six to 36 hit points of damage are done.", - "LAHALITO is an improved MAHALITO, doing the same damage as DALTO.", - "MAMORLIS is similar to MORLIS, except that all monster groups are" - + " affected.", - "Any monsters of less than eigth level (i.e. about 35-40 hit points)" - + " are killed by this spell outright.", - "An improved DALTO causing eight to 64 hit points of damage.", - "All monsters in the group affected by this spell die. Of course," - + " there is a chance that some of the monsters will not be affected.", - "This spell will destroy any one monster that is of the Undead" + " variety", - "This spell duplicates the effects of SOPIC for the entire party.", - "This spell is indeed terrible, and may backfire on the caster." - + " First, to even cast it, you must be of the thirteenth level or" - + " higher, and casting it will cost you one level of experience." - + " The effects of HAMAN are random, and usually help the party.", - "This spell's effects depend on the situation the party is in when it" - + " is cast.Basically, MALOR will teleport the entire party from one" - + " location to another. When used in melee, the teleport is random," - + " but when used in camp, where there is more chance for concentration" - + ", it can be used to move the party anywhere in the maze. Be warned," - + " however, that if you teleport outside of the maze, or into an" - + " area that is solid rock, you will be lost forever, so this spell" - + " is to be used with the greatest of care. Combat use of MALOR will" - + " never put you outside of the maze, but it may move you deeper in," - + " so it should be used only in panic situations.", - "The same restrictions and qualifications apply to this spell as do" - + " to HAMAN. However, the effects are even greater. Generally these" - + " spells are only used when there is no other hope for survival.", - "The effect of this spell can be described as similar to that of a" - + " nuclear fusion explosion. Luckily the party is shielded from its" - + " effects. Unluckily (for them) the monsters are not. This spell" - + " will do from 10-100 hit points of damage." }; + "MAHALITO causes a fiery explosion in a monster group, doing four" + + " to 24 hit points of damage. As with other similar spells," + + " monsters may be able to minimise the damage done.", + "MOLITO causes sparks to fly out and damage about half of the" + + " monsters in a group. Three to 18 hit points of damage are done" + + " with no chance of avoiding the sparks.", + "MORLIS causes one group of monsters to fear the party greatly. The" + + " effects are the same as a double strength DILTO spell.", + "DALTO is similar to MAHALITO except that cold replaces flames." + + " Also, six to 36 hit points of damage are done.", + "LAHALITO is an improved MAHALITO, doing the same damage as DALTO.", + "MAMORLIS is similar to MORLIS, except that all monster groups are" + " affected.", + "Any monsters of less than eigth level (i.e. about 35-40 hit points)" + + " are killed by this spell outright.", + "An improved DALTO causing eight to 64 hit points of damage.", + "All monsters in the group affected by this spell die. Of course," + + " there is a chance that some of the monsters will not be affected.", + "This spell will destroy any one monster that is of the Undead" + " variety", + "This spell duplicates the effects of SOPIC for the entire party.", + "This spell is indeed terrible, and may backfire on the caster." + + " First, to even cast it, you must be of the thirteenth level or" + + " higher, and casting it will cost you one level of experience." + + " The effects of HAMAN are random, and usually help the party.", + "This spell's effects depend on the situation the party is in when it" + + " is cast.Basically, MALOR will teleport the entire party from one" + + " location to another. When used in melee, the teleport is random," + + " but when used in camp, where there is more chance for concentration" + + ", it can be used to move the party anywhere in the maze. Be warned," + + " however, that if you teleport outside of the maze, or into an" + + " area that is solid rock, you will be lost forever, so this spell" + + " is to be used with the greatest of care. Combat use of MALOR will" + + " never put you outside of the maze, but it may move you deeper in," + + " so it should be used only in panic situations.", + "The same restrictions and qualifications apply to this spell as do" + + " to HAMAN. However, the effects are even greater. Generally these" + + " spells are only used when there is no other hope for survival.", + "The effect of this spell can be described as similar to that of a" + + " nuclear fusion explosion. Luckily the party is shielded from its" + + " effects. Unluckily (for them) the monsters are not. This spell" + + " will do from 10-100 hit points of damage." }; } \ No newline at end of file