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