Commit 5eb0197a authored by alistert's avatar alistert

Added support for bonus level font.

parent 6b2a8919
......@@ -312,8 +312,7 @@ Bonus::Bonus (char * fileName, unsigned char diff) {
paletteEffects = new RotatePaletteEffect(240, 16, F32, paletteEffects);
// Adjust fonts to use bonus level palette
fontsFont->mapPalette(0, 32, 15, -16);
// Adjust panelBigFont to use bonus level palette
panelBigFont->mapPalette(0, 32, 15, -16);
......@@ -325,7 +324,6 @@ Bonus::Bonus (char * fileName, unsigned char diff) {
Bonus::~Bonus () {
// Restore font palettes
fontsFont->restorePalette();
panelBigFont->restorePalette();
return;
......@@ -570,17 +568,20 @@ void Bonus::draw () {
// Show gem count
spriteSet[47].draw(0, 0);
fontsFont->showString("x", 15, 0);
fontsFont->showNumber(localPlayer->getItems(), 64, 0);
fontsFont->showNumber(items, 117, 0);
bonusFont->showString("*", 0, 0);
bonusFont->showNumber(localPlayer->getItems() / 10, 50, 0);
bonusFont->showNumber(localPlayer->getItems() % 10, 68, 0);
bonusFont->showString("/", 65, 0);
bonusFont->showNumber(items, 124, 0);
// Show time remaining
if (endTime > ticks) x = (endTime - ticks) / 1000;
else x = 0;
fontsFont->showNumber(x / 60, 242, 0);
fontsFont->showNumber(x % 60, 286, 0);
bonusFont->showNumber(x / 60, 250, 0);
bonusFont->showString(":", 247, 0);
bonusFont->showNumber((x / 10) % 6, 274, 0);
bonusFont->showNumber(x % 10, 291, 0);
return;
......@@ -720,7 +721,7 @@ int Bonus::play () {
// If paused, draw "PAUSE"
if (pmessage && !pmenu)
fontsFont->showString("pause", (canvasW >> 1) - 44, 32);
bonusFont->showString("pause", (canvasW >> 1) - 44, 32);
// Draw statistics
drawStats(stats, 0);
......
......@@ -184,12 +184,12 @@ Font::Font (unsigned char* pixels, bool big) {
map[count++] = 37;
map[count++] = 39;
for (; count < 48; count++) map[count] = 0;
for (; count < 58; count++) map[count] = count - 47;
for (; count < 58; count++) map[count] = count - 47; // Numbers
map[count++] = 38;
for (; count < 65; count++) map[count] = 0;
for (; count < 91; count++) map[count] = count - 54;
for (; count < 91; count++) map[count] = count - 54; // Upper-case letters
for (; count < 97; count++) map[count] = 0;
for (; count < 123; count++) map[count] = count - 86;
for (; count < 123; count++) map[count] = count - 86; // Lower-case letters
for (; count < 128; count++) map[count] = 0;
} else {
......@@ -198,7 +198,7 @@ Font::Font (unsigned char* pixels, bool big) {
// Use :; to represent the infinity symbol
for (count = 0; count < 48; count++) map[count] = 0;
for (; count < 60; count++) map[count] = count - 47;
for (; count < 60; count++) map[count] = count - 47; // Numbers and :;
for (; count < 128; count++) map[count] = 0;
}
......@@ -208,18 +208,18 @@ Font::Font (unsigned char* pixels, bool big) {
}
Font::Font () {
Font::Font (bool bonus) {
File* file;
unsigned char* pixels;
int fileSize;
int count, width, height;
// Load font from FONTS.000
// Load font from FONTS.000 or BONUS.000
try {
file = new File(F_FONTS, false);
file = new File(bonus? F_BONUS: F_FONTS, false);
} catch (int e) {
......@@ -232,6 +232,25 @@ Font::Font () {
nCharacters = file->loadShort();
if (bonus) {
count = file->loadShort();
nCharacters -= count;
// Skip sprites
for (; count > 0; count--) {
file->seek(4, false);
width = file->loadShort();
if (width == 0xFFFF) width = 0;
file->seek((width << 2) + file->loadShort(), false);
}
}
// Load characters
......@@ -245,9 +264,12 @@ Font::Font () {
}
width = file->loadShort() << 2;
width = file->loadShort();
height = file->loadShort();
if (bonus) width = (width + 3) & ~3;
else width <<= 2;
file->seek(4, false);
pixels = file->loadPixels(width * height);
......@@ -275,14 +297,30 @@ Font::Font () {
// Create ASCII->font map
for (count = 0; count < 37; count++) map[count] = nCharacters;
map[count++] = 36;
for (; count < 48; count++) map[count] = nCharacters;
for (; count < 58; count++) map[count] = count - 22;
count = 0;
if (bonus) {
for (; count < 42; count++) map[count] = nCharacters;
map[count++] = 37; // *
for (; count < 46; count++) map[count] = nCharacters;
map[count++] = 39; // .
map[count++] = 38; // /
for (; count < 59; count++) map[count] = count - 22; // Numbers and :
} else {
for (; count < 37; count++) map[count] = nCharacters;
map[count++] = 36; // %
for (; count < 48; count++) map[count] = nCharacters;
for (; count < 58; count++) map[count] = count - 22; // Numbers
}
for (; count < 65; count++) map[count] = nCharacters;
for (; count < 91; count++) map[count] = count - 65;
for (; count < 91; count++) map[count] = count - 65; // Upper-case letters
for (; count < 97; count++) map[count] = nCharacters;
for (; count < 123; count++) map[count] = count - 97;
for (; count < 123; count++) map[count] = count - 97; // Lower-case letters
for (; count < 128; count++) map[count] = nCharacters;
nCharacters++;
......
......@@ -44,7 +44,7 @@ class Font {
public:
Font (const char *fileName);
Font (unsigned char *pixels, bool big);
Font ();
Font (bool bonus);
~Font ();
int showString (const char *s, int x, int y);
......@@ -69,6 +69,7 @@ EXTERN Font *fontmn2; /* Taken from .0FN file name */
EXTERN Font *panelBigFont; /* Found in PANEL.000 */
EXTERN Font *panelSmallFont; /* Found in PANEL.000 */
EXTERN Font *fontsFont; /* Found in FONTS.000 */
EXTERN Font *bonusFont; /* Found in BONUS.000 */
#endif
......@@ -400,6 +400,8 @@ int loadMain (int argc, char *argv[]) {
// Load fonts
fontsFont = NULL;
bonusFont = NULL;
panelBigFont = NULL;
panelSmallFont = NULL;
font2 = NULL;
......@@ -409,7 +411,8 @@ int loadMain (int argc, char *argv[]) {
try {
fontsFont = new Font();
fontsFont = new Font(false);
bonusFont = new Font(true);
panelBigFont = new Font(pixels + (40 * 320), true);
panelSmallFont = new Font(pixels + (48 * 320), false);
font2 = new Font(F_FONT2_0FN);
......@@ -421,6 +424,7 @@ int loadMain (int argc, char *argv[]) {
} catch (int e) {
if (fontsFont) delete fontsFont;
if (bonusFont) delete bonusFont;
if (panelBigFont) delete panelBigFont;
if (panelSmallFont) delete panelSmallFont;
if (font2) delete font2;
......@@ -479,7 +483,9 @@ void freeMain () {
int scaleFactor;
delete net;
delete fontsFont;
delete bonusFont;
delete panelBigFont;
delete panelSmallFont;
delete font2;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment