Difference for main/gamefont.c from version 1.4 to 1.5


version 1.4 version 1.5
Line 19
 
Line 19
  * Fonts for the game.   * Fonts for the game.
  *    *
  * $Log$   * $Log$
    * Revision 1.5  1999/11/20 10:05:17  donut
    * variable size menu patch from Jan Bobrowski.  Variable menu font size support and a bunch of fixes for menus that didn't work quite right, by me (MPM).
    *
  * Revision 1.4  1999/10/08 09:00:47  donut   * Revision 1.4  1999/10/08 09:00:47  donut
  * fixed undefined error on mingw   * fixed undefined error on mingw
  *   *
Line 83
 
Line 86
 #include "hudmsg.h"  #include "hudmsg.h"
 #include "gamefont.h"  #include "gamefont.h"
   
 char * Gamefont_filenames[] = { "font1-1.fnt", // Font 0  char * Gamefont_filenames_l[] = { "font1-1.fnt", // Font 0
  "font2-1.fnt", // Font 1   "font2-1.fnt", // Font 1
  "font2-2.fnt", // Font 2   "font2-2.fnt", // Font 2
  "font2-3.fnt", // Font 3   "font2-3.fnt", // Font 3
  "font3-1.fnt" // Font 4   "font3-1.fnt" // Font 4
  };   };
   
   //large fonts from d2:
   char * Gamefont_filenames_h[] = { "font1-1h.fnt", // Font 0
    "font2-1h.fnt", // Font 1
    "font2-2h.fnt", // Font 2
    "font2-3h.fnt", // Font 3
    "font3-1h.fnt" // Font 4
    };
   
 grs_font *Gamefonts[MAX_FONTS];  grs_font *Gamefonts[MAX_FONTS];
   
 int Gamefont_installed=0;  int Gamefont_installed=0;
   
 //code to allow variable GAME_FONT, added 10/7/99 Matt Mueller  //code to allow variable GAME_FONT, added 10/7/99 Matt Mueller - updated 11/18/99 to handle all fonts, not just GFONT_SMALL
 // take scry into account? how/when?  // take scry into account? how/when?
 typedef struct _gamefont_conf{  typedef struct _a_gamefont_conf{
  int x;   int x;
  int builtin;  
  union{   union{
  char name[64];//hrm.   char name[64];//hrm.
  grs_font *ptr;   grs_font *ptr;
  } f;   } f;
   }a_gamefont_conf;
   typedef struct _gamefont_conf{
    a_gamefont_conf font[10];
    int num,cur;
 }gamefont_conf;  }gamefont_conf;
   
 gamefont_conf font_conf[10];  gamefont_conf font_conf[MAX_FONTS];
 int num_font_conf=0,cur_font_conf=-1;  
 grs_font *game_font=NULL;  char *gamefont_curfontname(int gf){
    if (font_conf[gf].cur<0)
 void gamefont_unloadfont(void){   return Gamefont_filenames_l[gf];
  if (game_font){   else
  if (cur_font_conf>=0){   return font_conf[gf].font[font_conf[gf].cur].f.name;
  if (!font_conf[cur_font_conf].builtin)  }
  gr_close_font(game_font);  
  }  void gamefont_unloadfont(int gf){
  game_font=NULL;   if (Gamefonts[gf]){
  }   font_conf[gf].cur=-1;
 }   gr_close_font(Gamefonts[gf]);
 void gamefont_loadfont(int fi){   Gamefonts[gf]=NULL;
  if (font_conf[fi].builtin){   }
  gamefont_unloadfont();  }
  game_font=font_conf[fi].f.ptr;  void gamefont_loadfont(int gf,int fi){
  }else{   if (cfexist(font_conf[gf].font[fi].f.name)){
  if (cfexist(font_conf[fi].f.name)){   gamefont_unloadfont(gf);
  gamefont_unloadfont();   Gamefonts[gf]=gr_init_font(font_conf[gf].font[fi].f.name);
  game_font=gr_init_font(font_conf[fi].f.name);  
  }else {   }else {
  hud_message(MSGC_GAME_FEEDBACK,"Couldn't find font file %s!",font_conf[fi].f.name);   hud_message(MSGC_GAME_FEEDBACK,"Couldn't find font file %s!",font_conf[gf].font[fi].f.name);
  if (game_font==NULL){   if (Gamefonts[gf]==NULL){
  game_font=Gamefonts[GFONT_SMALL];   Gamefonts[gf]=gr_init_font(Gamefont_filenames_l[gf]);
  cur_font_conf=-1;   font_conf[gf].cur=-1;
  }   }
  return;   return;
  }   }
  }   font_conf[gf].cur=fi;
  cur_font_conf=fi;  
 }  }
 void gamefont_choose_game_font(int scrx,int scry){  void gamefont_choose_game_font(int scrx,int scry){
  int i,close=-1,m=-1;   int gf,i,close=-1,m=-1;
    mprintf ((0,"gamefont_choose_game_font(%i,%i) %i\n",scrx,scry,Gamefont_installed));
  if (!Gamefont_installed) return;   if (!Gamefont_installed) return;
    
  for (i=0;i<num_font_conf;i++)   for (gf=0;gf<MAX_FONTS;gf++){
  if (scrx>=font_conf[i].x && close<font_conf[i].x){   for (i=0;i<font_conf[gf].num;i++)
  close=font_conf[i].x;   if (scrx>=font_conf[gf].font[i].x && close<font_conf[gf].font[i].x){
    close=font_conf[gf].font[i].x;
  m=i;   m=i;
  }   }
  if (m<0)   if (m<0)
  Error("no gamefont found for %ix%i\n",scrx,scry);   Error("no gamefont found for %ix%i\n",scrx,scry);
   
  gamefont_loadfont(m);   gamefont_loadfont(gf,m);
 }  }
    
 void addfontconf(int x,char * fn){  
  int i,b=0;  
  grs_font *ptr=NULL;  
  for (i=0; i<MAX_FONTS; i++ )   for (i=0; i<MAX_FONTS; i++ )
  if (stricmp(fn,Gamefont_filenames[i])==0){   mprintf ((0,"font %i: %ix%i\n",i,Gamefonts[i]->ft_w,Gamefonts[i]->ft_h));
  b=1;  }
  ptr=Gamefonts[i];  
  }  void addfontconf(int gf, int x,char * fn){
  mprintf((0,"adding font %s at %i, %i: ",fn,x,b));    int i;
  for (i=0;i<num_font_conf;i++){   mprintf((0,"adding font %s at %i %i: ",fn,gf,x));
  if (font_conf[i].x==x){   for (i=0;i<font_conf[gf].num;i++){
    if (font_conf[gf].font[i].x==x){
  mprintf((0,"replaced %i\n",i));   mprintf((0,"replaced %i\n",i));
  if (i==cur_font_conf)   if (i==font_conf[gf].cur)
  gamefont_unloadfont();   gamefont_unloadfont(gf);
  font_conf[i].builtin=b;   strcpy(font_conf[gf].font[i].f.name,fn);
  if (b)   if (i==font_conf[gf].cur)
  font_conf[i].f.ptr=ptr;   gamefont_loadfont(gf,i);
  else  
  strcpy(font_conf[i].f.name,fn);  
  if (i==cur_font_conf)  
  gamefont_loadfont(i);  
  return;   return;
  }   }
  }   }
  mprintf((0,"added %i\n",num_font_conf));   mprintf((0,"added %i\n",font_conf[gf].num));
  font_conf[num_font_conf].x=x;   font_conf[gf].font[font_conf[gf].num].x=x;
  font_conf[num_font_conf].builtin=b;   strcpy(font_conf[gf].font[font_conf[gf].num].f.name,fn);
  if (b)   font_conf[gf].num++;
  font_conf[num_font_conf].f.ptr=ptr;  
  else  
  strcpy(font_conf[num_font_conf].f.name,fn);  
  num_font_conf++;  
 }  }
   
 void gamefont_init()  void gamefont_init()
Line 193
 
Line 197
  if (Gamefont_installed) return;   if (Gamefont_installed) return;
  Gamefont_installed = 1;   Gamefont_installed = 1;
   
  for (i=0; i<MAX_FONTS; i++ )   for (i=0;i<MAX_FONTS;i++){
  Gamefonts[i] = gr_init_font(Gamefont_filenames[i]);   Gamefonts[i]=NULL;
    addfontconf(i,0,Gamefont_filenames_l[i]);
    addfontconf(i,640,Gamefont_filenames_h[i]);
    }
   
  addfontconf(0,"font3-1.fnt");//default font.  // addfontconf(640,"pc6x8.fnt");
  addfontconf(640,"pc6x8.fnt");  // addfontconf(1024,"pc8x16.fnt");
  addfontconf(1024,"pc8x16.fnt");  
  if ((i=FindArg("-font320")))   if ((i=FindArg("-font320")))
  addfontconf(320,Args[i+1]);   addfontconf(4,320,Args[i+1]);
  if ((i=FindArg("-font640")))   if ((i=FindArg("-font640")))
  addfontconf(640,Args[i+1]);   addfontconf(4,640,Args[i+1]);
  if ((i=FindArg("-font800")))   if ((i=FindArg("-font800")))
  addfontconf(800,Args[i+1]);   addfontconf(4,800,Args[i+1]);
  if ((i=FindArg("-font1024")))   if ((i=FindArg("-font1024")))
  addfontconf(1024,Args[i+1]);   addfontconf(4,1024,Args[i+1]);
  gamefont_choose_game_font(320,200);  
    
  for (i=0; i<MAX_FONTS; i++ )   gamefont_choose_game_font(grd_curscreen->sc_canvas.cv_bitmap.bm_w,grd_curscreen->sc_canvas.cv_bitmap.bm_h);
  printf ("font %i: %ix%i\n",i,Gamefonts[i]->ft_w,Gamefonts[i]->ft_h);  
   
  atexit( gamefont_close );   atexit( gamefont_close );
 }  }
Line 224
 
Line 228
  Gamefont_installed = 0;   Gamefont_installed = 0;
   
  for (i=0; i<MAX_FONTS; i++ ) {   for (i=0; i<MAX_FONTS; i++ ) {
  gr_close_font( Gamefonts[i] );   gamefont_unloadfont(i);
  Gamefonts[i] = NULL;  // gr_close_font( Gamefonts[i] );
   // Gamefonts[i] = NULL;
  }   }
   
 }  }

Legend:
line(s) removed in v.1.4 
line(s) changed
 line(s) added in v.1.5