From 4f46100da515fb25b94db2c6dc045120db56c096 Mon Sep 17 00:00:00 2001 From: Leandro Nini Date: Sat, 11 Jul 2026 18:11:43 +0200 Subject: [PATCH 1/2] Simplify --- src/bme/bme_gfx.cpp | 17 ++--------------- src/bme/bme_gfx.h | 2 +- src/console.cpp | 2 +- 3 files changed, 4 insertions(+), 17 deletions(-) diff --git a/src/bme/bme_gfx.cpp b/src/bme/bme_gfx.cpp index d855398..fa0bea7 100644 --- a/src/bme/bme_gfx.cpp +++ b/src/bme/bme_gfx.cpp @@ -190,42 +190,29 @@ bool gfx_loadpalette(const char *name) } io_close(handle); - gfx_calcpalette(64, 0, 0, 0); + gfx_calcpalette(); bme_error = BME_OK; return true; } -void gfx_calcpalette(int fade, int radd, int gadd, int badd) +void gfx_calcpalette() { - if (radd < 0) radd = 0; - if (gadd < 0) gadd = 0; - if (badd < 0) badd = 0; - Uint8 *sptr = &gfx_palette[3]; for (int c = 1; c < 255; c++) { int cl = *sptr; - cl *= fade; - cl >>= 6; - cl += radd; if (cl > 63) cl = 63; if (cl < 0) cl = 0; gfx_sdlpalette[c].r = (cl << 2) | (cl & 3); sptr++; cl = *sptr; - cl *= fade; - cl >>= 6; - cl += gadd; if (cl > 63) cl = 63; if (cl < 0) cl = 0; gfx_sdlpalette[c].g = (cl << 2) | (cl & 3); sptr++; cl = *sptr; - cl *= fade; - cl >>= 6; - cl += badd; if (cl > 63) cl = 63; if (cl < 0) cl = 0; gfx_sdlpalette[c].b = (cl << 2) | (cl & 3); diff --git a/src/bme/bme_gfx.h b/src/bme/bme_gfx.h index acbe0c2..333e476 100644 --- a/src/bme/bme_gfx.h +++ b/src/bme/bme_gfx.h @@ -13,7 +13,7 @@ void gfx_unlock(); void gfx_flip(); bool gfx_loadpalette(const char *name); -void gfx_calcpalette(int fade, int radd, int gadd, int badd); +void gfx_calcpalette(); void gfx_setpalette(); bool gfx_loadcursor( const char *name); diff --git a/src/console.cpp b/src/console.cpp index 2c82a8e..c7bbaf5 100644 --- a/src/console.cpp +++ b/src/console.cpp @@ -171,7 +171,7 @@ void loadexternalpalette() if (p >= 768) break; } - gfx_calcpalette(64, 0, 0, 0); + gfx_calcpalette(); } } From 4ed6924c506964a0d27fce462ae66f2cc8f22bc1 Mon Sep 17 00:00:00 2001 From: Leandro Nini Date: Sat, 11 Jul 2026 19:23:00 +0200 Subject: [PATCH 2/2] Rework internal palette --- src/bme/bme_gfx.cpp | 92 +++++++++++++++++++++----------------------- src/bme/bme_gfx.h | 6 +-- src/console.cpp | 16 +++----- src/display.cpp | 30 +++++++-------- src/loadtrk.seq | 1 - src/palette.bin | Bin 768 -> 0 bytes src/palette.lbm | Bin 2510 -> 0 bytes 7 files changed, 67 insertions(+), 78 deletions(-) delete mode 100644 src/palette.bin delete mode 100644 src/palette.lbm diff --git a/src/bme/bme_gfx.cpp b/src/bme/bme_gfx.cpp index fa0bea7..189cf0e 100644 --- a/src/bme/bme_gfx.cpp +++ b/src/bme/bme_gfx.cpp @@ -16,7 +16,42 @@ #include #include -#define MAX_COLORS 256 // 8bit oldskool mode +// Colodore palette +unsigned char gfx_palette[MAX_COLORS * 3] = +{ + // Black + 0x00, 0x00, 0x00, + // White + 0xFF, 0xFF, 0xFF, + // Red + 0x96, 0x28, 0x2e, + // Cyan + 0x5b, 0xd6, 0xce, + // Purple + 0x9f, 0x2d, 0xad, + // Green + 0x41, 0xb9, 0x36, + // Blue + 0x27, 0x24, 0xc4, + // Yellow + 0xef, 0xf3, 0x47, + // Orange + 0x9f, 0x48, 0x15, + // Brown + 0x5e, 0x35, 0x00, + // Light Red + 0xda, 0x5f, 0x66, + // Dark Gray + 0x47, 0x47, 0x47, + // Medium Gray + 0x78, 0x78, 0x78, + // Light Green + 0x91, 0xff, 0x84, + // Light Blue + 0x68, 0x64, 0xff, + // Light Gray + 0xae, 0xae, 0xae +}; void gfx_setclipregion(unsigned left, unsigned top, unsigned right, unsigned bottom); @@ -29,7 +64,6 @@ unsigned gfx_windowxsize; unsigned gfx_windowysize; int spr_xsize = 0; int spr_ysize = 0; -Uint8 gfx_palette[MAX_COLORS * 3] = {0}; SDL_Surface *gfx_screen = nullptr; SDL_Renderer *gfx_renderer = nullptr; @@ -44,7 +78,6 @@ static int gfx_cliptop; static int gfx_clipbottom; static int gfx_clipleft; static int gfx_clipright; -static int gfx_maxcolors = MAX_COLORS; static SDL_Surface *gfx_cursor = nullptr; @@ -97,16 +130,6 @@ bool gfx_init(unsigned xsize, unsigned ysize, unsigned framerate, unsigned flags gfx_setclipregion(0, 0, gfx_virtualxsize, gfx_virtualysize); - // Colors 0 & 255 are always black & white - gfx_sdlpalette[0].r = 0; - gfx_sdlpalette[0].g = 0; - gfx_sdlpalette[0].b = 0; - gfx_sdlpalette[0].a = 255; - gfx_sdlpalette[255].r = 255; - gfx_sdlpalette[255].g = 255; - gfx_sdlpalette[255].b = 255; - gfx_sdlpalette[255].a = 255; - gfx_renderer = SDL_CreateRenderer(win_window, nullptr); gfx_screen = SDL_CreateSurface(xsize, ysize, SDL_PIXELFORMAT_INDEX8); sdlTexture = SDL_CreateTexture(gfx_renderer, @@ -174,48 +197,18 @@ void gfx_flip() gfx_redraw = false; } -bool gfx_loadpalette(const char *name) -{ - int handle = io_open(name); - if (handle == -1) - { - bme_error = BME_OPEN_ERROR; - return false; - } - if (io_read(handle, gfx_palette, sizeof gfx_palette) != sizeof gfx_palette) - { - bme_error = BME_READ_ERROR; - io_close(handle); - return false; - } - - io_close(handle); - gfx_calcpalette(); - bme_error = BME_OK; - return true; -} - void gfx_calcpalette() { - Uint8 *sptr = &gfx_palette[3]; - for (int c = 1; c < 255; c++) + unsigned char *sptr = gfx_palette; + for (int c = 0; c < MAX_COLORS; c++) { - int cl = *sptr; - if (cl > 63) cl = 63; - if (cl < 0) cl = 0; - gfx_sdlpalette[c].r = (cl << 2) | (cl & 3); + gfx_sdlpalette[c].r = *sptr; sptr++; - cl = *sptr; - if (cl > 63) cl = 63; - if (cl < 0) cl = 0; - gfx_sdlpalette[c].g = (cl << 2) | (cl & 3); + gfx_sdlpalette[c].g = *sptr; sptr++; - cl = *sptr; - if (cl > 63) cl = 63; - if (cl < 0) cl = 0; - gfx_sdlpalette[c].b = (cl << 2) | (cl & 3); + gfx_sdlpalette[c].b = *sptr; sptr++; gfx_sdlpalette[c].a = 255; @@ -226,8 +219,9 @@ void gfx_setpalette() { if (!gfx_initted) return; + gfx_calcpalette(); SDL_Palette *palette = SDL_CreateSurfacePalette(gfx_screen); - SDL_SetPaletteColors(palette, &gfx_sdlpalette[0], 0, gfx_maxcolors); + SDL_SetPaletteColors(palette, &gfx_sdlpalette[0], 0, MAX_COLORS); } void gfx_setclipregion(unsigned left, unsigned top, unsigned right, unsigned bottom) diff --git a/src/bme/bme_gfx.h b/src/bme/bme_gfx.h index 333e476..d3edb98 100644 --- a/src/bme/bme_gfx.h +++ b/src/bme/bme_gfx.h @@ -5,6 +5,8 @@ #include +#define MAX_COLORS 16 // 8bit oldskool mode + bool gfx_init(unsigned xsize, unsigned ysize, unsigned framerate, unsigned flags); int gfx_reinit(); void gfx_uninit(); @@ -12,8 +14,6 @@ bool gfx_lock(); void gfx_unlock(); void gfx_flip(); -bool gfx_loadpalette(const char *name); -void gfx_calcpalette(); void gfx_setpalette(); bool gfx_loadcursor( const char *name); @@ -26,7 +26,7 @@ extern unsigned gfx_windowxsize; extern unsigned gfx_windowysize; extern unsigned gfx_virtualxsize; extern unsigned gfx_virtualysize; -extern Uint8 gfx_palette[]; +extern unsigned char gfx_palette[]; extern SDL_Surface *gfx_screen; #endif diff --git a/src/console.cpp b/src/console.cpp index c7bbaf5..f2dfa7b 100644 --- a/src/console.cpp +++ b/src/console.cpp @@ -126,8 +126,6 @@ bool initscreen() io_read(handle, &chardata[0], 4096); io_close(handle); - if (!gfx_loadpalette("palette.bin")) - return false; loadexternalpalette(); gfx_setpalette(); @@ -157,21 +155,19 @@ void loadexternalpalette() if (std::sscanf(ln, "%d", &colors) == 1 && colors == 256) { int p = 0; - while (!feof(ext_f)) + while (!std::feof(ext_f)) { - int r, g, b; if (!std::fgets(ln, sizeof(ln), ext_f)) break; + int r, g, b; if (std::sscanf(ln, "%d %d %d", &r, &g, &b) == 3) { - // JASC palette is 8-bit and goat palette is 6-bit - gfx_palette[p++] = r / 4; - gfx_palette[p++] = g / 4; - gfx_palette[p++] = b / 4; + gfx_palette[p++] = r; + gfx_palette[p++] = g; + gfx_palette[p++] = b; } - if (p >= 768) break; + if (p >= MAX_COLORS*3) break; } - gfx_calcpalette(); } } diff --git a/src/display.cpp b/src/display.cpp index f4fdea9..c9a8050 100644 --- a/src/display.cpp +++ b/src/display.cpp @@ -41,21 +41,21 @@ #include #define CBLACK 0x0 -#define CDBLUE 0x1 -#define CDGREEN 0x2 -#define CDGREY 0x3 -#define CDRED 0x4 -#define CDBROWN 0x5 -#define CLBROWN 0x6 -#define CLGREY 0x7 -#define CGREY 0x8 -#define CLBLUE 0x9 -#define CLGREEN 0xA -#define CCYAN 0xB -#define CLRED 0xC -#define CPURPLE 0xD -#define CYELLOW 0xE -#define CWHITE 0xF +#define CWHITE 0x1 +#define CLRED 0x2 +#define CCYAN 0x3 +#define CPURPLE 0x4 +#define CDGREEN 0x5 +#define CDBLUE 0x6 +#define CYELLOW 0x7 +#define CLBROWN 0x8 +#define CDBROWN 0x9 +#define CDRED 0xA +#define CDGREY 0xB +#define CGREY 0xC +#define CLGREEN 0xD +#define CLBLUE 0xE +#define CLGREY 0xF const char *notename[] = {"C-0", "C#0", "D-0", "D#0", "E-0", "F-0", "F#0", "G-0", "G#0", "A-0", "A#0", "B-0", diff --git a/src/loadtrk.seq b/src/loadtrk.seq index 2db70df..338d7e4 100644 --- a/src/loadtrk.seq +++ b/src/loadtrk.seq @@ -3,6 +3,5 @@ altplayer.s player_s.s altplayer_s.s chargen.bin -palette.bin cursor.png loadtrk.bmp diff --git a/src/palette.bin b/src/palette.bin deleted file mode 100644 index eb5a93019b9d95744785a6f786f30b955f37cb00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768 zcmZQzVBq1=;y2=#l$12$=T{P8Fp_34GBQ$CRaH{5*Ra>%H!`x9mNw!yvbT}6x3^~) N1*0J_TtWbto&l#t2QdHu diff --git a/src/palette.lbm b/src/palette.lbm deleted file mode 100644 index f8b90cae71692b35d6a8ef61b62c57678d2e72fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2510 zcmZ?s5AtPT;5-)K*2z{z#zitz;FUcGjK340!daj5Z~F?F@S-A86<3MyxRV> zeR_KOX?y$bV20EA45v?@o<4ngclZCr{}?6hu1_p4hVPfEC5CY1uK{2u-Tx?J#Lk3v*&Ov_eKqVXyWdic3 zd