From 99378da298e124a67f6e675cca585d8a3a9e767e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Nov=C3=A1k?= Date: Fri, 31 Jan 2025 20:21:13 +0100 Subject: [PATCH] improve fonts and fix bugs --- Windows/skeldal_win.h | 3 ++- game/automap.c | 23 ++++++++++++++--------- game/builder.c | 16 ++++++++-------- game/gamesave.c | 4 ++-- game/globals.h | 6 ++++-- game/interfac.c | 3 ++- game/inv.c | 2 +- game/skeldal.c | 17 +++++++++++------ libs/bgraph2.c | 2 +- libs/bgraph2a.c | 5 ++++- platform/config.cpp | 4 ++-- platform/platform.h | 5 ++++- 12 files changed, 55 insertions(+), 35 deletions(-) diff --git a/Windows/skeldal_win.h b/Windows/skeldal_win.h index 8831498..44e6ec9 100644 --- a/Windows/skeldal_win.h +++ b/Windows/skeldal_win.h @@ -31,7 +31,8 @@ char *AutodetectWinAmp(); #endif #define RGB888(r,g,b) ((unsigned short)((((r)<<8)&0xF800) | (((g)<<3) & 0x7C0) | ((b)>>3))) -#define RGB555(r,g,b) ((unsigned short)(((r)<<11) | ((g)<<6) | (b))) +#define RGB555(r,g,b) ((unsigned short)(((r)<<11) | (((g) & 0xF8)<<6) | (b))) +#define RGB555_ALPHA(r,g,b) ((unsigned short)(((r)<<11) | ((((g) & 0xF8) | 0x04)<<6) | (b))) #pragma warning (disable : 4244 4761 4133) diff --git a/game/automap.c b/game/automap.c index 03e094c..f892037 100644 --- a/game/automap.c +++ b/game/automap.c @@ -32,6 +32,8 @@ #define MEDIUM_MAP_LINE1 RGB555(25,20,17) #define MEDIUM_MAP_LINE2 RGB555(31,22,6) +#define AUTOMAP_FONT_COLOR (RGB555(0,0,0)|FONT_TSHADOW_GRAY) + word stairs_colors[7]= {AUTOMAP_LINE1, RGB555(14,12,11), @@ -162,7 +164,7 @@ void ukaz_vsechny_texty_v_mape(void) char *c; if (texty_v_mape==NULL) return; - set_font(H_FLITT5,NOSHADOW(0)); + set_font(H_FLITT5,AUTOMAP_FONT_COLOR); cn=str_count(texty_v_mape); for(i=0;idata, int); c = va_arg(msg->data, char *); - set_font(H_FLITT5,NOSHADOW(0)); + set_font(H_FLITT5,AUTOMAP_FONT_COLOR); strcpy(text,c); save=(char *)getmem(strlen(text)+1); strcpy(save,text); @@ -243,15 +245,18 @@ void psani_poznamek_event(EVENT_MSG *msg,void **data) char c; c=quit_request_as_escape(va_arg(msg->data, int)); - set_font(H_FLITT5,NOSHADOW(0)); + set_font(H_FLITT5,AUTOMAP_FONT_COLOR); if (c) { switch (c) { case 8:if (index) index--; text[index]=0;break; - case 27:strcpy(text,save);break; + case 27:strcpy(text,save); + [[fallthrough]]; case 13:save_text_to_map(x,y,cur_depth,text); - send_message(E_DONE,E_MOUSE,psani_poznamek_event);msg->msg=-2;return; + send_message(E_DONE,E_MOUSE,psani_poznamek_event); + msg->msg=-2; + return; default:if (c>=32) { text[index]=c; @@ -290,7 +295,7 @@ int hledej_poznamku(int x,int y,int depth) y=(y-197)+map_yr; if (texty_v_mape==NULL) return -1; count=str_count(texty_v_mape); - set_font(H_FLITT5,NOSHADOW(0)); + set_font(H_FLITT5,AUTOMAP_FONT_COLOR); for(i=0;iflags & SD_SEC_VIS;i++,sd++) {} if (i!=4) {set_font(H_FSYMB,0x3e0);print_symbol(x,y,'T');} break; - case S_DIRA:set_font(H_FSYMB,NOSHADOW(0));print_symbol(x,y,'N');break; + case S_DIRA:set_font(H_FSYMB,AUTOMAP_FONT_COLOR);print_symbol(x,y,'N');break; } } else @@ -477,7 +482,7 @@ static void zobraz_herni_cas(void) strcat(text,cas); old_time=game_time; } - set_font(H_FONT6,NOSHADOW(0)); + set_font(H_FONT6,AUTOMAP_FONT_COLOR); set_aligned_position(635,372,2,2,text); outtext(text); } @@ -878,7 +883,7 @@ void wire_kniha(void) put_picture(0,0,ablock(H_KNIHA)); change_click_map(clk_kniha,CLK_KNIHA); unwire_proc=unwire_kniha; - set_font(H_FONT6,NOSHADOW(0)); + set_font(H_FONT6,AUTOMAP_FONT_COLOR); write_book(cur_page); ukaz_mysku(); showview(0,0,0,0); diff --git a/game/builder.c b/game/builder.c index 85fd654..2a484d3 100644 --- a/game/builder.c +++ b/game/builder.c @@ -43,15 +43,15 @@ #define HUMAN_ADJUST 97 -unsigned short barvy_skupin[POCET_POSTAV+1]= +unsigned int barvy_skupin[POCET_POSTAV+1]= { - RGB555(8,8,8), - RGB555(31,28,00), - RGB555(00,23,06), - RGB555(31,11,13), - RGB555(22,16,31), - RGB555(28,13,31), - RGB555(00,29,26) + RGB555(8,8,8)|FONT_TSHADOW, + RGB555(31,28,00)|FONT_TSHADOW, + RGB555(00,23,06)|FONT_TSHADOW, + RGB555(31,11,13)|FONT_TSHADOW, + RGB555(22,16,31)|FONT_TSHADOW, + RGB555(28,13,31)|FONT_TSHADOW, + RGB555(00,29,26)|FONT_TSHADOW }; char reverse_draw=0; diff --git a/game/gamesave.c b/game/gamesave.c index 3127284..f8cab09 100644 --- a/game/gamesave.c +++ b/game/gamesave.c @@ -891,8 +891,8 @@ static int cur_story_pos=0; static char load_mode; #define SLOT_SPACE 33 -#define SELECT_COLOR RGB555(31,31,31) -#define NORMAL_COLOR RGB555(10,31,10) +#define SELECT_COLOR (RGB555(31,31,31)|FONT_TSHADOW) +#define NORMAL_COLOR (RGB555(12,31,12)|FONT_TSHADOW) #define STORY_X 57 #define STORY_Y 50 #define STORY_XS (298-57) diff --git a/game/globals.h b/game/globals.h index 8460728..c655cd3 100644 --- a/game/globals.h +++ b/game/globals.h @@ -580,7 +580,7 @@ extern int num_ofsets[]; //tabulka offsetu pro steny extern int back_color; //cislo barvy pozadi extern uint8_t cur_group; //cislo aktualni skupiny extern uint8_t group_select; //1 = prave byla sestavena nova skupina -extern unsigned short barvy_skupin[POCET_POSTAV+1]; //cisla barev skupin +extern unsigned int barvy_skupin[POCET_POSTAV+1]; //cisla barev skupin extern char battle; //jednicka znaci ze bezi bitva extern char battle_mode; //rezim bitvy 0=programovani extern char neco_v_pohybu; //jednicka znaci ze se nektere potvory jeste hejbou @@ -668,6 +668,8 @@ void delete_from_timer(int id); THE_TIMER *find_timer(int id); void objekty_mimo(void); void mouse_set_cursor(int cursor); +#define FONT_TSHADOW 0x10000 +#define FONT_TSHADOW_GRAY 0x30000 void set_font(int font,int c1,...); void bott_draw(char); const void *bott_draw_proc(const void *p, int32_t *s); @@ -1648,7 +1650,7 @@ void spell_teleport(int cil,int owner, int teleport_target); #define WINCOLOR RGB555(24,24,24) // 11000 11000 0 11000 #define BAR_COLOR RGB555(15,13,11) #define SETUP_COL1 RGB555(20,31,20) -#define SETUP_COL2 RGB555(31,31,12) +#define SETUP_COL2 (RGB555(31,31,16) | FONT_TSHADOW) #define S_WINPOS_X 100 #define S_WINPOS_Y 100 #define S_WINPOS_XS 320 diff --git a/game/interfac.c b/game/interfac.c index ac65e91..c3ed1e1 100644 --- a/game/interfac.c +++ b/game/interfac.c @@ -181,6 +181,7 @@ static T_CLK_MAP message_win[]= }; #define MSG_COLOR1 (RGB555(30,30,23)) +#define MSG_COLOR_T -2,RGB555_ALPHA(0,0,0),RGB555(24,31,24),RGB555(24,31,24),RGB555(24,31,24),RGB555(24,31,24) void open_message_win(int pocet_textu,char **texts) { @@ -190,7 +191,7 @@ void open_message_win(int pocet_textu,char **texts) int i; char *text; - set_font(H_FBOLD,MSG_COLOR1); + set_font(H_FBOLD,MSG_COLOR_T); text=alloca(strlen(texts[0])+2); zalamovani(texts[0],text,MES_MAXSIZE,&maxxs,&maxys); maxws=0;wsys=0; diff --git a/game/inv.c b/game/inv.c index b6caf27..719e930 100644 --- a/game/inv.c +++ b/game/inv.c @@ -81,7 +81,7 @@ static TSHOP_ALL_STATE shop_all_state; #define INV_YS 60 #define INV_NAME_X 129 #define INV_NAME_Y 349 -#define INV_NAME_COL (RGB555(10,31,31)) +#define INV_NAME_COL (RGB555(10,31,31)|FONT_TSHADOW_GRAY) #define INV_DESK 266 #define INV_INFO_X 298 #define INV_INFO_Y 343 diff --git a/game/skeldal.c b/game/skeldal.c index b33f35a..06906c0 100644 --- a/game/skeldal.c +++ b/game/skeldal.c @@ -462,6 +462,8 @@ void mouse_set_default(int cursor) void set_font(int font,int c1,...) { static int last_font=-1; + va_list lst; + va_start(lst, c1); int i; if (last_font!=-1 && last_font!=font) @@ -476,17 +478,20 @@ void set_font(int font,int c1,...) charcolors[0]=0xFFFF; for (i=1;i<5;i++) charcolors[i]=c1 & ~0x20; } - else + else if (c1 & FONT_TSHADOW) { + if ((c1 & FONT_TSHADOW_GRAY) == FONT_TSHADOW_GRAY) + charcolors[0]=RGB555_ALPHA(16,16,15); + else + charcolors[0]=BGSWITCHBIT; + for (i=1;i<5;i++) charcolors[i]=c1 & ~0x20; + }else { charcolors[0]=0; for (i=1;i<5;i++) charcolors[i]=c1 & ~0x20; } else if (c1==-2) { - int *p; - - p=&c1;p++; - for (i=0;i<5;i++) charcolors[i]=*p++; + for (i=0;i<7;i++) charcolors[i]=va_arg(lst, int); } last_font=font; default_font=curfont; @@ -1593,7 +1598,7 @@ void show_help(const char *arg0) { } void show_help_short() { - printf("add -h to print help\n"); + printf("Use -h for help\n"); } void quit_cb_exit_wait(void *) { diff --git a/libs/bgraph2.c b/libs/bgraph2.c index eb0d662..1e92d56 100644 --- a/libs/bgraph2.c +++ b/libs/bgraph2.c @@ -7,7 +7,7 @@ #include "memman.h" word *screen; -word curcolor,charcolors[7] = {0x0000,RGB555(0,31,0),RGB555(0,28,0),RGB555(0,24,0),RGB555(0,20,0),0x0000,0x0000}; +word curcolor,charcolors[7] = {RGB555_ALPHA(0,0,0),RGB555(12,31,12),RGB555(12,30,12),RGB555(12,28,12),RGB555(12,20,12),0x0000,0x0000}; const word *curfont; word *writepos,writeposx; byte fontdsize=0; diff --git a/libs/bgraph2a.c b/libs/bgraph2a.c index b12680f..d400c04 100644 --- a/libs/bgraph2a.c +++ b/libs/bgraph2a.c @@ -147,7 +147,10 @@ chr5: if (al == 0) goto chr2; if (al >= 8) goto chr3; ax = charcolors[(al-1)]; - if (ax == 0xffff) goto chr4; + if (ax == 0xFFFF) goto chr4; + if (ax & BGSWITCHBIT) { + ax = ((*ebx & 0xF7DF) + (ax & 0xF7DF)) >> 1; + } *ebx = ax; goto chr4; chr3:if (al == 255) goto chrend; diff --git a/platform/config.cpp b/platform/config.cpp index 0b915a4..1a4dcad 100644 --- a/platform/config.cpp +++ b/platform/config.cpp @@ -58,10 +58,10 @@ void parseIniStream(std::istream& input, Callback &&callback) { INI_CONFIG* ini_open(const char *filename) { - INI_CONFIG *c = new INI_CONFIG; std::fstream input(filename); - if (!input) return c; + if (!input) return NULL; + INI_CONFIG *c = new INI_CONFIG; parseIniStream(input, [&](std::string_view section, std::string_view key, std::string_view value) { INI_CONFIG::Config::iterator iter = c->data.find(section); if (iter == c->data.end()) { diff --git a/platform/platform.h b/platform/platform.h index 9f5ae30..c3f1975 100644 --- a/platform/platform.h +++ b/platform/platform.h @@ -7,6 +7,7 @@ #define BGSWITCHBIT 0x0020 + #define SKELDALINI "skeldal.ini" #ifdef __cplusplus @@ -24,7 +25,9 @@ uint32_t _bios_keybrd(int mode); #define RGB888(r,g,b) ((unsigned short)((((r)<<8)&0xF800) | (((g)<<3) & 0x7C0) | ((b)>>3))) -#define RGB555(r,g,b) ((unsigned short)(((r)<<11) | ((g)<<6) | (b))) +#define RGB555(r,g,b) (((unsigned short)(((r)<<11) | ((g)<<6) | (b))) & ~BGSWITCHBIT) +#define RGB555_ALPHA(r,g,b) (((unsigned short)(((r)<<11) | ((g)<<6) | (b))) | BGSWITCHBIT) + ///build pathname from parts