improve fonts and fix bugs

This commit is contained in:
Ondřej Novák 2025-01-31 20:21:13 +01:00
parent a8a87d514c
commit 99378da298
12 changed files with 55 additions and 35 deletions

View file

@ -31,7 +31,8 @@ char *AutodetectWinAmp();
#endif #endif
#define RGB888(r,g,b) ((unsigned short)((((r)<<8)&0xF800) | (((g)<<3) & 0x7C0) | ((b)>>3))) #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) #pragma warning (disable : 4244 4761 4133)

View file

@ -32,6 +32,8 @@
#define MEDIUM_MAP_LINE1 RGB555(25,20,17) #define MEDIUM_MAP_LINE1 RGB555(25,20,17)
#define MEDIUM_MAP_LINE2 RGB555(31,22,6) #define MEDIUM_MAP_LINE2 RGB555(31,22,6)
#define AUTOMAP_FONT_COLOR (RGB555(0,0,0)|FONT_TSHADOW_GRAY)
word stairs_colors[7]= word stairs_colors[7]=
{AUTOMAP_LINE1, {AUTOMAP_LINE1,
RGB555(14,12,11), RGB555(14,12,11),
@ -162,7 +164,7 @@ void ukaz_vsechny_texty_v_mape(void)
char *c; char *c;
if (texty_v_mape==NULL) return; 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); cn=str_count(texty_v_mape);
for(i=0;i<cn;i++) for(i=0;i<cn;i++)
{ {
@ -215,7 +217,7 @@ void psani_poznamek_event(EVENT_MSG *msg,void **data)
y = va_arg(msg->data, int); y = va_arg(msg->data, int);
c = va_arg(msg->data, char *); c = va_arg(msg->data, char *);
set_font(H_FLITT5,NOSHADOW(0)); set_font(H_FLITT5,AUTOMAP_FONT_COLOR);
strcpy(text,c); strcpy(text,c);
save=(char *)getmem(strlen(text)+1); save=(char *)getmem(strlen(text)+1);
strcpy(save,text); strcpy(save,text);
@ -243,15 +245,18 @@ void psani_poznamek_event(EVENT_MSG *msg,void **data)
char c; char c;
c=quit_request_as_escape(va_arg(msg->data, int)); 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) if (c)
{ {
switch (c) switch (c)
{ {
case 8:if (index) index--; text[index]=0;break; 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); 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) default:if (c>=32)
{ {
text[index]=c; text[index]=c;
@ -290,7 +295,7 @@ int hledej_poznamku(int x,int y,int depth)
y=(y-197)+map_yr; y=(y-197)+map_yr;
if (texty_v_mape==NULL) return -1; if (texty_v_mape==NULL) return -1;
count=str_count(texty_v_mape); count=str_count(texty_v_mape);
set_font(H_FLITT5,NOSHADOW(0)); set_font(H_FLITT5,AUTOMAP_FONT_COLOR);
for(i=0;i<count;i++) for(i=0;i<count;i++)
if (texty_v_mape[i]!=NULL) if (texty_v_mape[i]!=NULL)
{ {
@ -412,7 +417,7 @@ static void draw_amap_sector(int x,int y,int sector,int mode,int turn,int line1,
for(i=0,sd=map_sides+sector*4;i<4 && ~sd->flags & SD_SEC_VIS;i++,sd++) {} for(i=0,sd=map_sides+sector*4;i<4 && ~sd->flags & SD_SEC_VIS;i++,sd++) {}
if (i!=4) {set_font(H_FSYMB,0x3e0);print_symbol(x,y,'T');} if (i!=4) {set_font(H_FSYMB,0x3e0);print_symbol(x,y,'T');}
break; 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 else
@ -477,7 +482,7 @@ static void zobraz_herni_cas(void)
strcat(text,cas); strcat(text,cas);
old_time=game_time; 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); set_aligned_position(635,372,2,2,text);
outtext(text); outtext(text);
} }
@ -878,7 +883,7 @@ void wire_kniha(void)
put_picture(0,0,ablock(H_KNIHA)); put_picture(0,0,ablock(H_KNIHA));
change_click_map(clk_kniha,CLK_KNIHA); change_click_map(clk_kniha,CLK_KNIHA);
unwire_proc=unwire_kniha; unwire_proc=unwire_kniha;
set_font(H_FONT6,NOSHADOW(0)); set_font(H_FONT6,AUTOMAP_FONT_COLOR);
write_book(cur_page); write_book(cur_page);
ukaz_mysku(); ukaz_mysku();
showview(0,0,0,0); showview(0,0,0,0);

View file

@ -43,15 +43,15 @@
#define HUMAN_ADJUST 97 #define HUMAN_ADJUST 97
unsigned short barvy_skupin[POCET_POSTAV+1]= unsigned int barvy_skupin[POCET_POSTAV+1]=
{ {
RGB555(8,8,8), RGB555(8,8,8)|FONT_TSHADOW,
RGB555(31,28,00), RGB555(31,28,00)|FONT_TSHADOW,
RGB555(00,23,06), RGB555(00,23,06)|FONT_TSHADOW,
RGB555(31,11,13), RGB555(31,11,13)|FONT_TSHADOW,
RGB555(22,16,31), RGB555(22,16,31)|FONT_TSHADOW,
RGB555(28,13,31), RGB555(28,13,31)|FONT_TSHADOW,
RGB555(00,29,26) RGB555(00,29,26)|FONT_TSHADOW
}; };
char reverse_draw=0; char reverse_draw=0;

View file

@ -891,8 +891,8 @@ static int cur_story_pos=0;
static char load_mode; static char load_mode;
#define SLOT_SPACE 33 #define SLOT_SPACE 33
#define SELECT_COLOR RGB555(31,31,31) #define SELECT_COLOR (RGB555(31,31,31)|FONT_TSHADOW)
#define NORMAL_COLOR RGB555(10,31,10) #define NORMAL_COLOR (RGB555(12,31,12)|FONT_TSHADOW)
#define STORY_X 57 #define STORY_X 57
#define STORY_Y 50 #define STORY_Y 50
#define STORY_XS (298-57) #define STORY_XS (298-57)

View file

@ -580,7 +580,7 @@ extern int num_ofsets[]; //tabulka offsetu pro steny
extern int back_color; //cislo barvy pozadi extern int back_color; //cislo barvy pozadi
extern uint8_t cur_group; //cislo aktualni skupiny extern uint8_t cur_group; //cislo aktualni skupiny
extern uint8_t group_select; //1 = prave byla sestavena nova skupina 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; //jednicka znaci ze bezi bitva
extern char battle_mode; //rezim bitvy 0=programovani extern char battle_mode; //rezim bitvy 0=programovani
extern char neco_v_pohybu; //jednicka znaci ze se nektere potvory jeste hejbou 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); THE_TIMER *find_timer(int id);
void objekty_mimo(void); void objekty_mimo(void);
void mouse_set_cursor(int cursor); void mouse_set_cursor(int cursor);
#define FONT_TSHADOW 0x10000
#define FONT_TSHADOW_GRAY 0x30000
void set_font(int font,int c1,...); void set_font(int font,int c1,...);
void bott_draw(char); void bott_draw(char);
const void *bott_draw_proc(const void *p, int32_t *s); 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 WINCOLOR RGB555(24,24,24) // 11000 11000 0 11000
#define BAR_COLOR RGB555(15,13,11) #define BAR_COLOR RGB555(15,13,11)
#define SETUP_COL1 RGB555(20,31,20) #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_X 100
#define S_WINPOS_Y 100 #define S_WINPOS_Y 100
#define S_WINPOS_XS 320 #define S_WINPOS_XS 320

View file

@ -181,6 +181,7 @@ static T_CLK_MAP message_win[]=
}; };
#define MSG_COLOR1 (RGB555(30,30,23)) #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) void open_message_win(int pocet_textu,char **texts)
{ {
@ -190,7 +191,7 @@ void open_message_win(int pocet_textu,char **texts)
int i; int i;
char *text; char *text;
set_font(H_FBOLD,MSG_COLOR1); set_font(H_FBOLD,MSG_COLOR_T);
text=alloca(strlen(texts[0])+2); text=alloca(strlen(texts[0])+2);
zalamovani(texts[0],text,MES_MAXSIZE,&maxxs,&maxys); zalamovani(texts[0],text,MES_MAXSIZE,&maxxs,&maxys);
maxws=0;wsys=0; maxws=0;wsys=0;

View file

@ -81,7 +81,7 @@ static TSHOP_ALL_STATE shop_all_state;
#define INV_YS 60 #define INV_YS 60
#define INV_NAME_X 129 #define INV_NAME_X 129
#define INV_NAME_Y 349 #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_DESK 266
#define INV_INFO_X 298 #define INV_INFO_X 298
#define INV_INFO_Y 343 #define INV_INFO_Y 343

View file

@ -462,6 +462,8 @@ void mouse_set_default(int cursor)
void set_font(int font,int c1,...) void set_font(int font,int c1,...)
{ {
static int last_font=-1; static int last_font=-1;
va_list lst;
va_start(lst, c1);
int i; int i;
if (last_font!=-1 && last_font!=font) if (last_font!=-1 && last_font!=font)
@ -476,17 +478,20 @@ void set_font(int font,int c1,...)
charcolors[0]=0xFFFF; charcolors[0]=0xFFFF;
for (i=1;i<5;i++) charcolors[i]=c1 & ~0x20; for (i=1;i<5;i++) charcolors[i]=c1 & ~0x20;
} }
else if (c1 & FONT_TSHADOW) {
if ((c1 & FONT_TSHADOW_GRAY) == FONT_TSHADOW_GRAY)
charcolors[0]=RGB555_ALPHA(16,16,15);
else else
charcolors[0]=BGSWITCHBIT;
for (i=1;i<5;i++) charcolors[i]=c1 & ~0x20;
}else
{ {
charcolors[0]=0; charcolors[0]=0;
for (i=1;i<5;i++) charcolors[i]=c1 & ~0x20; for (i=1;i<5;i++) charcolors[i]=c1 & ~0x20;
} }
else if (c1==-2) else if (c1==-2)
{ {
int *p; for (i=0;i<7;i++) charcolors[i]=va_arg(lst, int);
p=&c1;p++;
for (i=0;i<5;i++) charcolors[i]=*p++;
} }
last_font=font; last_font=font;
default_font=curfont; default_font=curfont;
@ -1593,7 +1598,7 @@ void show_help(const char *arg0) {
} }
void show_help_short() { void show_help_short() {
printf("add -h to print help\n"); printf("Use -h for help\n");
} }
void quit_cb_exit_wait(void *) { void quit_cb_exit_wait(void *) {

View file

@ -7,7 +7,7 @@
#include "memman.h" #include "memman.h"
word *screen; 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; const word *curfont;
word *writepos,writeposx; word *writepos,writeposx;
byte fontdsize=0; byte fontdsize=0;

View file

@ -147,7 +147,10 @@ chr5:
if (al == 0) goto chr2; if (al == 0) goto chr2;
if (al >= 8) goto chr3; if (al >= 8) goto chr3;
ax = charcolors[(al-1)]; 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; *ebx = ax;
goto chr4; goto chr4;
chr3:if (al == 255) goto chrend; chr3:if (al == 255) goto chrend;

View file

@ -58,10 +58,10 @@ void parseIniStream(std::istream& input, Callback &&callback) {
INI_CONFIG* ini_open(const char *filename) { INI_CONFIG* ini_open(const char *filename) {
INI_CONFIG *c = new INI_CONFIG;
std::fstream input(filename); 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) { parseIniStream(input, [&](std::string_view section, std::string_view key, std::string_view value) {
INI_CONFIG::Config::iterator iter = c->data.find(section); INI_CONFIG::Config::iterator iter = c->data.find(section);
if (iter == c->data.end()) { if (iter == c->data.end()) {

View file

@ -7,6 +7,7 @@
#define BGSWITCHBIT 0x0020 #define BGSWITCHBIT 0x0020
#define SKELDALINI "skeldal.ini" #define SKELDALINI "skeldal.ini"
#ifdef __cplusplus #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 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 ///build pathname from parts