Difference for main/custom.c from version 1.1 to 1.2


version 1.1 version 1.2
Line 22
 
Line 22
 extern hashtable AllBitmapsNames;  extern hashtable AllBitmapsNames;
 extern hashtable AllDigiSndNames;  extern hashtable AllDigiSndNames;
   
   #if 0 // removed memory saving extra bitmap structure hack
 struct bm_info {  struct bm_info {
     short bm_w,bm_h;      short bm_w,bm_h;
     ubyte bm_flags;      ubyte bm_flags;
     ubyte avg_color;      ubyte avg_color;
     ubyte *bm_data;      ubyte *bm_data;
 };  };
   #endif
   
 struct snd_info {  struct snd_info {
     unsigned int length;      unsigned int length;
     ubyte *data;      ubyte *data;
 };  };
   
 struct bm_info BitmapOriginal[MAX_BITMAP_FILES];  grs_bitmap BitmapOriginal[MAX_BITMAP_FILES];
 struct snd_info SoundOriginal[MAX_SOUND_FILES];  struct snd_info SoundOriginal[MAX_SOUND_FILES];
   
 extern void gr_bm_bitblt(int w, int h, int dx, int dy, int sx, int sy, grs_bitmap * src, grs_bitmap * dest);  extern void gr_bm_bitblt(int w, int h, int dx, int dy, int sx, int sy, grs_bitmap * src, grs_bitmap * dest);
Line 105
 
Line 107
     if ((unsigned int)num_bitmaps <= MAX_BITMAP_FILES) { // <v1.4 pig?      if ((unsigned int)num_bitmaps <= MAX_BITMAP_FILES) { // <v1.4 pig?
  cfseek(f, 8, SEEK_SET);   cfseek(f, 8, SEEK_SET);
  data_ofs = 8;   data_ofs = 8;
     } else if ((unsigned int)num_bitmaps < cfilelength(f)) { // >=v1.4 pig?   } else if (num_bitmaps > 0 && num_bitmaps < cfilelength(f)) { // >=v1.4 pig?
     cfseek(f, num_bitmaps, SEEK_SET);      cfseek(f, num_bitmaps, SEEK_SET);
     data_ofs = num_bitmaps + 8;      data_ofs = num_bitmaps + 8;
  num_bitmaps = read_int(f);   num_bitmaps = read_int(f);
Line 251
 
Line 253
                 goto err;                  goto err;
      bmp = &GameBitmaps[x];       bmp = &GameBitmaps[x];
      if (BitmapOriginal[x].bm_flags & 0x80) // already customized?       if (BitmapOriginal[x].bm_flags & 0x80) // already customized?
                 gr_free_bitmap_data((grs_bitmap *) &bmp);   gr_free_bitmap_data(bmp);
 //              free(bmp->bm_data);  //              free(bmp->bm_data);
      else {       else {
    // save original bitmap info
    BitmapOriginal[x] = *bmp;
    BitmapOriginal[x].bm_flags |= 0x80;
        if (GameBitmapOffset[x]) { // from pig?         if (GameBitmapOffset[x]) { // from pig?
                     gr_init_bitmap ((grs_bitmap *) &BitmapOriginal[x], bmp->bm_type, 0, 0, bmp->bm_w, bmp->bm_h, bmp->bm_rowsize, (ubyte *)GameBitmapOffset[x]);  
      BitmapOriginal[x].bm_flags |= BM_FLAG_PAGED_OUT;       BitmapOriginal[x].bm_flags |= BM_FLAG_PAGED_OUT;
                   }   BitmapOriginal[x].bm_data = (ubyte *)GameBitmapOffset[x];
                  else  
                   {  
                     gr_init_bitmap ((grs_bitmap *) &BitmapOriginal [x], bmp->bm_type, 0, 0, bmp->bm_w, bmp->bm_h, bmp->bm_rowsize, 0);  
                     gr_bm_bitblt (bmp->bm_w, bmp->bm_h, 0, 0, 0, 0, (grs_bitmap *) &bmp,(grs_bitmap *) &BitmapOriginal [x]);  
                   }                    }
      }       }
             GameBitmapOffset[x] = 0; // not in pig              GameBitmapOffset[x] = 0; // not in pig
                         gr_init_bitmap ((grs_bitmap *) &bmp, 0, 0, 0, cip->width, cip->height, cip->width, p);   #ifndef NDEBUG
    memset(bmp, 0, sizeof(*bmp));
    #endif
    gr_init_bitmap (bmp, 0, 0, 0, cip->width, cip->height,
    cip->width, p);
                         gr_set_bitmap_flags(bmp, cip->flags & 255);                          gr_set_bitmap_flags(bmp, cip->flags & 255);
   
 /*  
                   BitmapOriginal[x].bm_w = bmp->bm_w;  
                   BitmapOriginal[x].bm_h = bmp->bm_h;  
                   BitmapOriginal[x].bm_flags = bmp->bm_flags | 0x80;  
                   BitmapOriginal[x].avg_color = bmp->avg_color;  
                   if (GameBitmapOffset[x]) { // from pig?  
                       BitmapOriginal[x].bm_flags |= BM_FLAG_PAGED_OUT;  
                       BitmapOriginal[x].bm_data = (ubyte *)GameBitmapOffset[x];  
                   } else  
                       BitmapOriginal[x].bm_data = bmp->bm_data;  
   
   
             }  
             GameBitmapOffset[x] = 0; // not in pig  
             bmp->bm_w = bmp->bm_rowsize = cip->width;  
             bmp->bm_h = cip->height;  
             bmp->bm_flags = cip->flags & 255;  
             bmp->bm_data = p;  
 */  
   
      bmp->avg_color = cip->flags >> 8;       bmp->avg_color = cip->flags >> 8;
   
      #ifdef BITMAP_SELECTOR       #ifdef BITMAP_SELECTOR
      if ( bmp->bm_selector )       if ( bmp->bm_selector )
  if (!dpmi_modify_selector_base( bmp->bm_selector, bmp->bm_data ))   if (!dpmi_modify_selector_base( bmp->bm_selector, bmp->bm_data ))
Line 301
 
Line 284
      }       }
      if (cfread(p, 1, j, f) < 1)       if (cfread(p, 1, j, f) < 1)
  goto err;   goto err;
    #ifdef D1XD3D
    // needed to store rle flag
    gr_set_bitmap_data(bmp, bmp->bm_data);
    #endif
  } else if ((x + 1) < 0) {   } else if ((x + 1) < 0) {
      cfseek( f, cip->offset, SEEK_SET );       cfseek( f, cip->offset, SEEK_SET );
      snd = &GameSounds[x & 0x7fffffff];       snd = &GameSounds[x & 0x7fffffff];
Line 507
 
Line 494
 // undo customized items  // undo customized items
 void custom_remove() {  void custom_remove() {
     int i;      int i;
     struct bm_info *bmo = BitmapOriginal;   grs_bitmap *bmo = BitmapOriginal;
     grs_bitmap *bmp = GameBitmaps;      grs_bitmap *bmp = GameBitmaps;
   
     for (i = 0; i < MAX_BITMAP_FILES; bmo++, bmp++, i++)      for (i = 0; i < MAX_BITMAP_FILES; bmo++, bmp++, i++)
  if (bmo->bm_flags & 0x80) {   if (bmo->bm_flags & 0x80) {
             gr_free_bitmap_data((grs_bitmap *) &bmp);   gr_free_bitmap_data(bmp);
    *bmp = *bmo;
   
      bmp->bm_w = bmo->bm_w;  
      bmp->bm_h = bmo->bm_h;  
      bmp->avg_color = bmo->avg_color;  
      if (bmo->bm_flags & BM_FLAG_PAGED_OUT) {       if (bmo->bm_flags & BM_FLAG_PAGED_OUT) {
  GameBitmapOffset[i] = (int)BitmapOriginal[i].bm_data;   GameBitmapOffset[i] = (int)BitmapOriginal[i].bm_data;
  bmp->bm_flags = BM_FLAG_PAGED_OUT;   gr_set_bitmap_flags(bmp, BM_FLAG_PAGED_OUT);
 //                         gr_set_bitmap_data (bmp, Piggy_bitmap_cache_data);   gr_set_bitmap_data(bmp, Piggy_bitmap_cache_data);
                 gr_set_bitmap_data ((grs_bitmap *) bmp, NULL);  
      } else {       } else {
  bmp->bm_flags = bmo->bm_flags & 0x7f;   gr_set_bitmap_flags(bmp, bmo->bm_flags & 0x7f);
                 gr_set_bitmap_data (bmp, bmo->bm_data);  
   
  #ifdef BITMAP_SELECTOR   #ifdef BITMAP_SELECTOR
  if ( bmp->bm_selector )   if ( bmp->bm_selector )
      if (!dpmi_modify_selector_base( bmp->bm_selector, bmp->bm_data ))       if (!dpmi_modify_selector_base( bmp->bm_selector, bmp->bm_data ))
  Error( "Error modifying selector base in custom.c\n" );   Error( "Error modifying selector base in custom.c\n" );
  #endif   #endif
    #ifdef D1XD3D
    gr_set_bitmap_data(bmp, bmp->bm_data);
    #endif
             }              }
      bmo->bm_flags = 0;       bmo->bm_flags = 0;
  }   }

Legend:
line(s) removed in v.1.1 
line(s) changed
 line(s) added in v.1.2