1 /* $Id: gamepal.c,v 1.5 2003-10-10 09:36:35 btb Exp $ */
3 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
4 SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
5 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
6 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
7 IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
8 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
9 FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
10 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
11 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
12 COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
17 * Functions for loading palettes
29 #include "pa_enabl.h" //$$POLY_ACC
49 extern void g3_remap_interp_colors();
51 char Current_level_palette[FILENAME_LEN];
53 extern int Color_0_31_0, HUD_color;
55 //give a filename a new extension
56 void change_filename_ext( char *dest, char *src, char *ext )
67 p = dest + strlen(dest);
74 //background for boxed messages
76 short x, y, w, h; // The location of the menu.
77 grs_bitmap * bmp; // The background under the menu.
82 void load_background_bitmap(void);
84 char last_palette_loaded[FILENAME_LEN]="";
85 char last_palette_loaded_pig[FILENAME_LEN]="";
87 ubyte last_palette_for_color_fonts[768];
89 void remap_fonts_and_menus(int do_fadetable_hack)
91 nm_remap_background();
92 gr_remap_color_fonts();
94 if (do_fadetable_hack) {
100 intensity = (double)(14)/(double)(32);
102 gamma[i] = (int)((pow(intensity, 1.0/g)*i) + 0.5);
103 for (i=0;i<256;i++) {
105 c = gr_find_closest_color(gamma[gr_palette[i*3]],gamma[gr_palette[i*3+1]],gamma[gr_palette[i*3+2]]);
106 gr_fade_table[14*256+i] = c;
110 memcpy(last_palette_for_color_fonts,gr_palette,sizeof(last_palette_for_color_fonts));
113 //load a palette by name. returns 1 if new palette loaded, else 0
114 //if used_for_level is set, load pig, etc.
115 //if no_change_screen is set, the current screen does not get remapped,
116 //and the hardware palette does not get changed
117 int load_palette(char *name,int used_for_level,int no_change_screen)
119 char pigname[FILENAME_LEN];
120 ubyte old_pal[256*3];
122 //special hack to tell that palette system about a pig that's been loaded elsewhere
123 if (used_for_level == -2) {
124 strncpy(last_palette_loaded_pig,name,sizeof(last_palette_loaded_pig));
129 name = last_palette_loaded_pig;
131 if (used_for_level && stricmp(last_palette_loaded_pig,name) != 0) {
133 _splitpath(name,NULL,NULL,pigname,NULL);
134 strcat(pigname,".pig");
135 //if not editor, load pig first so small install message can come
136 //up in old palette. If editor version, we must load the pig after
137 //the palette is loaded so we can remap new textures.
139 piggy_new_pigfile(pigname);
143 if (stricmp(last_palette_loaded,name) != 0) {
145 memcpy(old_pal,gr_palette,sizeof(old_pal));
147 strncpy(last_palette_loaded,name,sizeof(last_palette_loaded));
149 gr_use_palette_table(name);
151 if (Function_mode == FMODE_GAME && !no_change_screen)
152 gr_remap_bitmap_good( &grd_curscreen->sc_canvas.cv_bitmap, old_pal, -1, -1 );
154 #if defined(POLY_ACC)
155 if (bg.bmp && bg.bmp->bm_type == BM_LINEAR)
159 gr_remap_bitmap_good( bg.bmp, old_pal, -1, -1 );
161 if (!gr_palette_faded_out && !no_change_screen)
162 gr_palette_load(gr_palette);
164 remap_fonts_and_menus(0);
166 Color_0_31_0 = -1; //for gauges
169 load_background_bitmap();
171 g3_remap_interp_colors();
175 if (used_for_level && stricmp(last_palette_loaded_pig,name) != 0) {
177 strncpy(last_palette_loaded_pig,name,sizeof(last_palette_loaded_pig));
180 piggy_new_pigfile(pigname);