dmolony-DiskBrowser/src/com/bytezone/diskbrowser/applefile/LodeRunner.java

93 lines
2.0 KiB
Java

package com.bytezone.diskbrowser.applefile;
import com.bytezone.diskbrowser.HexFormatter;
public class LodeRunner extends AbstractFile
{
public LodeRunner (String name, byte[] buffer)
{
super (name, buffer);
}
@Override
public String getText ()
{
StringBuilder text = new StringBuilder ();
text.append ("Lode Runner Level\n\n");
for (int level = 0; level < 150; level++)
{
int ptr = level * 256 + 226;
String levelName = "";
if (buffer[ptr] != 0 && buffer[ptr] != (byte) 0xFF)
levelName = HexFormatter.sanitiseString (buffer, ptr, 15);
text.append (String.format ("Level %d %s%n%n", level + 1, levelName));
ptr = 0;
for (int i = level * 256, max = i + 224; i < max; i++)
{
String val = String.format ("%02X", buffer[i]);
text = addPosition (text, val.charAt (0));
text.append (' ');
text = addPosition (text, val.charAt (1));
text.append (' ');
if (++ptr % 14 == 0)
text.append ("\n");
}
text.append ("\n\n");
}
return text.toString ();
}
private StringBuilder addPosition (StringBuilder text, char c)
{
switch (c)
{
case '0':
text.append (' '); // space
break;
case '1':
text.append ('-'); // diggable floor
break;
case '2':
text.append ('='); // undiggable floor
break;
case '3':
text.append ('+'); // ladder
break;
case '4':
text.append ('^'); // hand over hand bar
break;
case '5':
text.append ('~'); // trap door
break;
case '6':
text.append ('#'); // hidden ladder
break;
case '7':
text.append ('$'); // gold
break;
case '8':
text.append ('*'); // enemy
break;
case '9':
text.append ('x'); // player
break;
default:
text.append (c);
}
return text;
}
}