Modules/print
From MSX Game Library
< Modules
The print module used to display text in any screen mode. It offers functions for displaying different types of data in different formats, including advanced effects such as shading or outlining (for bitmap modes).
Contents
Usage
To use this module, include "print.h" in your source code, and add "print" to the modules list (LibModules) in your project's configuration file (project_config.js).
Use of this module begins with the initialization of a font. Then you can use all the functions to draw text on screen.
Modes
You have several font render modes.
Text
Draw characters as pattern names (text mode).
Requirement:
- Compatible with tiled-based screen modes: Screen 0 (40/80 columns), 1, 2 and 4.
- You need to activate PRINT_USE_TEXT compile option in your library configuration (msxgl_config.h).
Example using tile-based render mode:
#include "font/font_mgl_sample8.h" VDP_SetMode(VDP_MODE_SCREEN1); // Initialize screen mode 1 (tiled-base mode) Print_SetTextFont(g_Font_MGL_Sample8, 1); // Upload font tile-set from index 1 Print_SetPosition(10, 10); // Position in tile grid unit Print_DrawText("Text mode");
Bitmap
Draw characters from RAM (real-time unpack font data and draw it).
Requirement:
- Compatible with bitmap-based screen modes: Screen 5 to 8.
- You need to activate PRINT_USE_BITMAP or PRINT_USE_VRAM compile option in your library configuration (msxgl_config.h).
Example using bitmap render mode for MSX2:
#include "font/font_mgl_sample6.h" VDP_SetMode(VDP_MODE_SCREEN5); // Initialize screen mode 5 (bitmap mode) Print_SetBitmapFont(g_Font_MGL_Sample6); // Initialize bitmap font Print_SetOutline(TRUE, COLOR_GRAY); // Set outline effect Print_SetPosition(100, 100); // Position in pixel unit Print_DrawText("Bitmap mode");
Bitmap with transparency
Draw characters from RAM with transparency (real-time unpack font data and draw it).
Same mode than Bitmap but a little bit slower.
Can be activated using:
#include "font/font_mgl_sample6.h" VDP_SetMode(VDP_MODE_SCREEN5); // Initialize screen mode 5 (bitmap mode) Print_SetBitmapFont(g_Font_MGL_Sample6); // Initialize bitmap font Print_SetMode(PRINT_MODE_BITMAP_TRANS); // Activate transparency Print_SetPosition(100, 100); // Position in pixel unit Print_DrawText("Bitmap mode with transparency");
VRAM
Draw characters from VRAM (font data is upack once in VRAM thne drawing is done by VRAM copy). slower to initialize, far quicker to draw.
Requirement:
- Compatible with bitmap-based screen modes: Screen 5 to 8.
- You need to activate PRINT_USE_VRAM compile option in your library configuration (msxgl_config.h).
Example using bitmap render mode for MSX2:
#include "font/font_mgl_sample6.h" Print_SetVRAMFont(g_Font_MGL_Sample6, 212, COLOR_WHITE); Print_SetPosition(100, 150); // Position in pixel unit Print_DrawText("VRAM mode");
Sprites
Draw characters from sprites (load font data as sprite pattern in VRAM then display characters using sprite system).
Requirement:
- Compatible with all sprite enabled screen modes:
- Screen 1 to 3 (4 sprites per line),
- Screen 4 to 8 (8 sprites per line),
- You need to activate PRINT_USE_SPRITE compile option in your library configuration (msxgl_config.h).
Example using sprite render mode:
#include "font/font_mgl_sample8.h" VDP_SetMode(VDP_MODE_SCREEN1); // Initialize screen mode 1 (tiled-base mode) Print_SetSpriteFont(g_Font_MGL_Sample8, 0, 0); Print_SetPosition(100, 50); // Position in pixel unit Print_DrawText("SPRT");
Font modes compatibility matrix
Font mode | Screen modes | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 10 | 12 | |
Text | ✔️ | ✔️ | ✔️ | ❌ | ✔️ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
Bitmap | ❌ | ❌ | ❌ | ❌ | ❌ | ✔️ | ✔️ | ✔️ | ✔️ | ❔ | ❔ |
VRAM | ❌ | ❌ | ❌ | ❌ | ❌ | ✔️ | ✔️ | ✔️ | ✔️ | ❔ | ❔ |
Sprites | ❌ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Samples
See module use cases in the sample programs:
Settings
Library configuration (msxgl_config.h):
// Print module setting #define PRINT_USE_TEXT TRUE // Allow use of Text font (T1-T2, G1-G3) #define PRINT_USE_BITMAP FALSE // Allow use of Bitmap font (G4-G7) #define PRINT_USE_VRAM FALSE // Allow use of VRAM stored font (G4-G7) #define PRINT_USE_SPRITE FALSE // Allow use of Sprite font (G3-G7) #define PRINT_USE_FX_SHADOW FALSE // [Bitmap] Allow use of text shadow #define PRINT_USE_FX_OUTLINE FALSE // [Bitmap] Allow use of text outline #define PRINT_USE_2_PASS_FX FALSE // [Bitmap] Allow use 2-pass FX render to prevent character overlap #define PRINT_USE_GRAPH TRUE // Allow use of character lines and boxes #define PRINT_USE_VALIDATOR TRUE // Add validator character code #define PRINT_USE_UNIT FALSE // Display integer type (h: hexadecimal, b: binary) #define PRINT_USE_FORMAT TRUE // Add printf type function #define PRINT_USE_32B TRUE // Allow to print 32-bits integers #define PRINT_SKIP_SPACE FALSE // Skill space character #define PRINT_COLOR_NUM 12 // 1 color per line // Character width // - PRINT_WIDTH_1 (text mode) // - PRINT_WIDTH_6 (fixed to 6 pixels) // - PRINT_WIDTH_8 (fixed to 8 pixels) // - PRINT_WIDTH_X (variable) #define PRINT_WIDTH PRINT_WIDTH_1 // Character height // - PRINT_HEIGHT_1 (text mode) // - PRINT_HEIGHT_8 (fixed to 8 pixels) // - PRINT_HEIGHT_X (variable) #define PRINT_HEIGHT PRINT_HEIGHT_1
Dependencies
Dependency on other modules:
Documentation