home *** CD-ROM | disk | FTP | other *** search
/ GameStar Special 2004 August / GSSH0804.iso / Rollenspiele / SwordOfFargoal / fargoal20030731b.exe / fargoal / src / gfx.c < prev    next >
C/C++ Source or Header  |  2003-07-31  |  4KB  |  174 lines

  1. #include "main.h"
  2. #include "map.h"
  3. #include "gfx.h"
  4.  
  5. BITMAP *tiles[TILE_NUM];
  6. BITMAP *anims[CHAR_NUM];
  7.  
  8. BITMAP *title = NULL;
  9. BITMAP *tileset_bmp = NULL;
  10. BITMAP *charset_bmp = NULL;
  11.  
  12. int layout = 0;
  13. int tileset = 0;
  14. int charset = 0;
  15. int scheme = 0;
  16. int doublesize = 0;
  17.  
  18.  
  19. char scheme_name[100];
  20. char tileset_name[100];
  21. char charset_name[100];
  22. char layout_name[100];
  23.  
  24. int sprite_w, sprite_h;
  25.  
  26. static BITMAP *
  27. load_8bit (char const *name)
  28. {
  29.     PALETTE pal;
  30.     BITMAP *bmp = load_bitmap (name, pal);
  31.     if (!bmp)
  32.         return NULL;
  33.     if (bitmap_color_depth (screen) == 8)
  34.     {
  35.         BITMAP *tmp = create_bitmap_ex (32, bmp->w, bmp->h);
  36.         select_palette (pal);
  37.         blit (bmp, tmp, 0, 0, 0, 0, bmp->w, bmp->h);
  38.         unselect_palette ();
  39.         generate_332_palette (pal);
  40.         select_palette (pal);
  41.         blit (tmp, bmp, 0, 0, 0, 0, bmp->w, bmp->h);
  42.         unselect_palette ();
  43.         destroy_bitmap (tmp);
  44.     }
  45.     return bmp;
  46. }
  47.  
  48. static int colors[COLOR_COUNT];
  49.  
  50. int
  51. layout_color (int n)
  52. {
  53.     return colors[n];
  54. }
  55.  
  56. static void
  57. read_layout_colors (char const *name)
  58. {
  59.     char const *color_names[] =
  60.     {
  61.         "color_title",        
  62.         "color_menu",
  63.         "color_selected",
  64.         "color_message",
  65.         "color_help",
  66.         "color_gold",
  67.         "color_healthy",
  68.         "color_health",
  69.         "color_hurt",
  70.         "color_stats",
  71.         "color_info",
  72.         "color_dungeon",
  73.         "color_empty",
  74.         "color_beacons",
  75.         "color_beacon",
  76.         "color_sacks",
  77.         "color_potions",
  78.         "color_nopotions",
  79.         "color_nospell",
  80.         "color_spell",
  81.         "color_cast",
  82.         "color_time",
  83.         "color_blink",
  84.         "color_highlight"
  85.     };
  86.     int i;
  87.     for (i = 0; i < COLOR_COUNT; i++)
  88.     {
  89.         char const *rgb = get_config_string (name, color_names[i], "#ffffff");
  90.         int v = strtol (rgb + 1, NULL, 16);
  91.         colors[i] = makecol (v >> 16, (v >> 8) & 255, v & 255);
  92.     }
  93. };
  94.  
  95. int
  96. graphics_init (void)
  97. {
  98.     int i;
  99.     char const *name;
  100.     char section[256];
  101.  
  102.     if (!exists ("data/sof.cfg"))
  103.     {
  104.         printf ("Cannot find data/sof.cfg.\n");
  105.         return 1;
  106.     }
  107.     set_config_file ("data/sof.cfg");
  108.  
  109.     sprintf (section, "scheme%i", tileset);
  110.     strcpy (scheme_name, get_config_string (section, "name", "default"));
  111.  
  112.     name = get_config_string (section, "tileset", "gfx/tiles.bmp");
  113.  
  114.     strcpy (tileset_name, get_config_string (section, "name", "default"));
  115.     if (tileset_bmp)
  116.         destroy_bitmap (tileset_bmp);
  117.     tileset_bmp = load_8bit (name);
  118.     if (!tileset_bmp)
  119.     {
  120.         printf ("Could not find %s.\n", name);
  121.         return 1;
  122.     }
  123.     for (i = 0; i < TILE_NUM; i++)
  124.     {
  125.         if (tiles[i])
  126.             destroy_bitmap (tiles[i]);
  127.         tiles[i] = create_sub_bitmap (tileset_bmp, i * 16, 0, 16, 24);
  128.     }
  129.     
  130.     sprintf (section, "scheme%i", charset);
  131.     name = get_config_string (section, "sprites", "gfx/chars.bmp");
  132.     strcpy (charset_name, get_config_string (section, "name", "default"));
  133.     if (charset_bmp)
  134.         destroy_bitmap (charset_bmp);
  135.     charset_bmp = load_8bit (name);
  136.     if (!charset_bmp)
  137.     {
  138.         printf ("Could not find %s.\n", name);
  139.         return 1;
  140.     }
  141.     if (doublesize)
  142.     {
  143.         BITMAP *bmp = create_bitmap (charset_bmp->w * 2, charset_bmp->h * 2);
  144.         stretch_blit (charset_bmp, bmp, 0, 0, charset_bmp->w, charset_bmp->h,
  145.             0, 0, charset_bmp->w * 2, charset_bmp->h * 2);
  146.         destroy_bitmap (charset_bmp);
  147.         charset_bmp = bmp;
  148.     }
  149.     sprite_w = charset_bmp->w / 21;
  150.     sprite_h = charset_bmp->h;
  151.     for (i = 0; i < CHAR_NUM; i++)
  152.     {
  153.         if (anims[i])
  154.             destroy_bitmap (anims[i]);
  155.         anims[i] = create_sub_bitmap (charset_bmp, i * sprite_w, 0, sprite_w, sprite_h);
  156.     }
  157.     
  158.     sprintf (section, "scheme%i", layout);
  159.     name = get_config_string (section, "layout", "gfx/layout.bmp");
  160.  
  161.     read_layout_colors (section);
  162.     strcpy (layout_name, get_config_string (section, "name", "default"));
  163.     if (title)
  164.         destroy_bitmap (title);
  165.     title = load_8bit (name);
  166.     if (!title)
  167.     {
  168.         printf ("Could not find %s.\n", name);
  169.         return 1;
  170.     }
  171.     
  172.     return 0;
  173. }
  174.