This commit is contained in:
Denis Molony 2022-03-14 08:46:56 +10:00
parent d83ac3afda
commit 48aca6e1eb
4 changed files with 59 additions and 57 deletions

View File

@ -22,9 +22,8 @@ class ExperienceLevel extends AbstractFile
if (buffer[ptr] == 0)
break;
long points =
Utility.getShort (buffer, ptr) + Utility.getShort (buffer, ptr + 2) * 10000
+ Utility.getShort (buffer, ptr + 4) * 100000000L;
long points = Utility.getShort (buffer, ptr) + Utility.getShort (buffer, ptr + 2) * 10000
+ Utility.getShort (buffer, ptr + 4) * 100000000L;
expLevels[seq++] = points;
}
}
@ -33,9 +32,7 @@ class ExperienceLevel extends AbstractFile
long getExperiencePoints (int level)
// ---------------------------------------------------------------------------------//
{
if (level < 13)
return expLevels[level];
return (level - 12) * expLevels[0] + expLevels[12];
return level < 13 ? expLevels[level - 1] : (level - 13) * expLevels[0] + expLevels[12];
}
// ---------------------------------------------------------------------------------//
@ -43,9 +40,13 @@ class ExperienceLevel extends AbstractFile
public String getText ()
// ---------------------------------------------------------------------------------//
{
StringBuilder line = new StringBuilder ();
for (long exp : expLevels)
line.append (exp + "\n");
StringBuilder line = new StringBuilder (name + "\n\nLevel Points Needed\n");
for (int i = 2; i <= 26; i++)
line.append (String.format (" %2d %,13d%n", i, getExperiencePoints (i)));
line.append (String.format ("%n %,13d+", expLevels[0]));
return line.toString ();
}
}

View File

@ -11,7 +11,9 @@ import com.bytezone.diskbrowser.utilities.HexFormatter;
class MazeCell
// -----------------------------------------------------------------------------------//
{
static Dimension cellSize = new Dimension (22, 22); // size in pixels
static final Dimension cellSize = new Dimension (22, 22); // size in pixels
static final Color SECRET_DOOR = Color.RED;
static final Color DOOR = Color.GREEN;
boolean northWall;
boolean southWall;
@ -64,7 +66,7 @@ class MazeCell
// ---------------------------------------------------------------------------------//
{
g.setColor (Color.BLACK);
g.fillRect (x, y, 22, 22);
g.fillRect (x, y, cellSize.width, cellSize.height);
g.setColor (Color.WHITE);
@ -77,7 +79,7 @@ class MazeCell
if (southWall)
drawSouth (g, x, y);
g.setColor (Color.RED);
g.setColor (DOOR);
if (westDoor)
drawWest (g, x, y);
@ -88,7 +90,7 @@ class MazeCell
if (southDoor)
drawSouth (g, x, y);
g.setColor (Color.GREEN);
g.setColor (SECRET_DOOR);
if (westDoor && westWall)
drawWest (g, x, y);
@ -144,8 +146,7 @@ class MazeCell
void drawEast (Graphics2D g, int x, int y)
// ---------------------------------------------------------------------------------//
{
g.drawLine (x + cellSize.width - 1, y + 1, x + cellSize.width - 1,
y + cellSize.height - 1);
g.drawLine (x + cellSize.width - 1, y + 1, x + cellSize.width - 1, y + cellSize.height - 1);
}
// ---------------------------------------------------------------------------------//
@ -159,8 +160,7 @@ class MazeCell
void drawSouth (Graphics2D g, int x, int y)
// ---------------------------------------------------------------------------------//
{
g.drawLine (x + 1, y + cellSize.height - 1, x + cellSize.width - 1,
y + cellSize.height - 1);
g.drawLine (x + 1, y + cellSize.height - 1, x + cellSize.width - 1, y + cellSize.height - 1);
}
// ---------------------------------------------------------------------------------//
@ -324,8 +324,8 @@ class MazeCell
sign.append ("castle&nbsp;");
else
{
sign.append ("L" + addressTo.level + " " + addressTo.row + "N " + addressTo.column
+ "E&nbsp;");
sign.append (
"L" + addressTo.level + " " + addressTo.row + "N " + addressTo.column + "E&nbsp;");
}
}
if (pit)

View File

@ -15,6 +15,10 @@ import com.bytezone.diskbrowser.utilities.Utility;
public class MazeLevel extends AbstractFile
// -----------------------------------------------------------------------------------//
{
private static final int AUX0 = 768;
private static final int AUX1 = 800;
private static final int AUX2 = 832;
private static final String[] squareType =
{ "Normal", "Stairs", "Pit", "Chute", "Spinner", "Darkness", "Teleport", "Ouch", "Elevator",
"Rock/Water", "Fizzle", "Message/Item", "Monster" };
@ -67,15 +71,15 @@ public class MazeLevel extends AbstractFile
text.append (String.format ("%04X: %s%n", 760, HexFormatter.getHexString (buffer, 760, 8)));
text.append ("\nAUX0\n\n");
text.append (HexFormatter.format (buffer, 768, 32, true, 768));
text.append (HexFormatter.format (buffer, AUX0, 32, true, AUX0));
text.append ("\n");
text.append ("\nAUX1\n\n");
text.append (HexFormatter.format (buffer, 800, 32, true, 800));
text.append (HexFormatter.format (buffer, AUX1, 32, true, AUX1));
text.append ("\n");
text.append ("\nAUX2\n\n");
text.append (HexFormatter.format (buffer, 832, 32, true, 832));
text.append (HexFormatter.format (buffer, AUX2, 32, true, AUX2));
text.append ("\n");
List<MazeAddress> messageList = new ArrayList<> ();
@ -121,8 +125,8 @@ public class MazeLevel extends AbstractFile
for (int col = 0; col < 20; col++)
{
text.append (String.format ("Col %2d : %s : ", col,
HexFormatter.getHexString (buffer, ptr + col * 6, 6)));
text.append (
String.format (" Col %2d : %s : ", col, HexFormatter.getHexString (buffer, ptr, 6)));
for (int i = 0; i < 5; i++)
{
@ -209,13 +213,6 @@ public class MazeLevel extends AbstractFile
extraText += items.get (address.level).getName ();
}
if (messageType == 5)
{
extraText += "Requires: ";
if (items != null)
extraText += items.get (address.level).getName ();
}
if (messageType == 4)
{
if (address.level < monsters.size ())
@ -223,6 +220,13 @@ public class MazeLevel extends AbstractFile
else
extraText += "Obtained: " + items.get ((address.level - 64536) * -1).getName ();
}
if (messageType == 5)
{
extraText += "Requires: ";
if (items != null)
extraText += items.get (address.level).getName ();
}
}
if (cellFlag == 12)
@ -279,6 +283,7 @@ public class MazeLevel extends AbstractFile
int y = image.getHeight () - (row + 1) * cellSize.height - 1;
cell.draw (g, x, y);
}
return image;
}
@ -365,53 +370,53 @@ public class MazeLevel extends AbstractFile
case 0: // normal
break;
case 1:
case 1: // stairs
cell.stairs = true;
cell.addressTo = getAddress (b);
break;
case 2:
case 2: // pit
cell.pit = true;
break;
case 3:
case 3: // chute
cell.chute = true;
cell.addressTo = getAddress (b);
break;
case 4:
case 4: // spinner
cell.spinner = true;
break;
case 5:
case 5: // dark
cell.darkness = true;
break;
case 6:
case 6: // transfer
cell.teleport = true;
cell.addressTo = getAddress (b);
break;
case 7: // ouchy
case 7: // ouchy
cell.unknown = cellFlag;
break;
case 8: // buttonz
case 8: // buttonz
cell.elevator = true;
MazeAddress elevatorAddress = getAddress (b);
cell.elevatorTo = elevatorAddress.row;
cell.elevatorFrom = elevatorAddress.column;
break;
case 9: // rock/water
case 9: // rock/water
cell.rock = true;
break;
case 10: // fizzle
case 10: // fizzle
cell.spellsBlocked = true;
break;
case 11: // screen message
case 11: // screen message
MazeAddress messageAddress = getAddress (b);
Message m = getMessage (messageAddress.row);
if (m != null)
@ -419,20 +424,15 @@ public class MazeLevel extends AbstractFile
cell.messageType = messageAddress.column;
int itemID = -1;
switch (cell.messageType)
{
case 2: // obtain Item
if (items != null)
{
itemID = messageAddress.level;
cell.itemObtained = items.get (itemID);
}
cell.itemObtained = items.get (messageAddress.level);
break;
case 4:
itemID = messageAddress.level;
int itemID = messageAddress.level;
if (itemID <= 100)
{
cell.monsterID = itemID;
@ -451,10 +451,7 @@ public class MazeLevel extends AbstractFile
case 5: // requires Item
if (items != null)
{
itemID = messageAddress.level;
cell.itemRequired = items.get (itemID);
}
cell.itemRequired = items.get (messageAddress.level);
break;
}
@ -480,9 +477,9 @@ public class MazeLevel extends AbstractFile
// ---------------------------------------------------------------------------------//
{
// converts AUX1, AUX2, AUX3 into a MazeAddress (level, row, column)
int x = b * 2;
return new MazeAddress (Utility.getShort (buffer, 768 + x), Utility.getShort (buffer, 800 + x),
Utility.getShort (buffer, 832 + x));
b *= 2;
return new MazeAddress (Utility.getShort (buffer, 768 + b), Utility.getShort (buffer, 800 + b),
Utility.getShort (buffer, 832 + b));
}
// ---------------------------------------------------------------------------------//

View File

@ -586,6 +586,10 @@ public class WizardryScenarioDisk extends PascalDisk
experiences = new ArrayList<> (sd.total);
int max = sd.totalBlocks / 2;
int count = 0;
String[] classes =
{ "FIGHTER", "MAGE", "PRIEST", "THIEF", "BISHOP", "SAMURAI", "LORD", "NINJA" };
for (int i = 0; i < max; i++)
{
List<DiskAddress> blocks = getTwoBlocks (sd, i, sectors);
@ -599,7 +603,7 @@ public class WizardryScenarioDisk extends PascalDisk
byte[] newBuffer = new byte[78];
System.arraycopy (buffer, ptr, newBuffer, 0, newBuffer.length);
ExperienceLevel el = new ExperienceLevel ("exp", newBuffer);
ExperienceLevel el = new ExperienceLevel (classes[count++], newBuffer);
experiences.add (el);
addToNode (el, node, blocks, experienceSector);
}