]> icculus.org git repositories - btb/d2x.git/blob - main/gamepal.c
use the orientation parameter of g3_draw_bitmap
[btb/d2x.git] / main / gamepal.c
1 /*
2 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
3 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
4 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
5 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
6 IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
7 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
8 FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
9 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
10 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
11 COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
12 */
13
14 /*
15  *
16  * Functions for loading palettes
17  *
18  */
19
20 #ifdef HAVE_CONFIG_H
21 #include <conf.h>
22 #endif
23
24 #include <string.h>
25 #include <stdlib.h>
26 #include <math.h>
27
28 #include "maths.h"
29 #include "gr.h"
30 #include "3d.h"
31 #include "inferno.h"
32 #include "strutil.h"
33
34
35 extern void g3_remap_interp_colors(void);
36
37 char Current_level_palette[FILENAME_LEN];
38
39 extern int Color_0_31_0, HUD_color;
40
41 //background for boxed messages
42 typedef struct bkg {
43         short x, y, w, h;                       // The location of the menu.
44         grs_bitmap * bmp;                       // The background under the menu.
45 } bkg;
46
47 extern bkg bg;
48
49 void load_background_bitmap(void);
50
51 char last_palette_loaded[FILENAME_LEN]="";
52 char last_palette_loaded_pig[FILENAME_LEN]="";
53
54 ubyte last_palette_for_color_fonts[768];
55
56 void remap_fonts_and_menus(int do_fadetable_hack)
57 {
58         nm_remap_background();
59         gr_remap_color_fonts();
60
61         if (do_fadetable_hack) {
62                 int i;
63                 float g = 1.0;
64                 double intensity;
65                 ubyte gamma[64];
66
67                 intensity = (double)(14)/(double)(32);
68                 for (i=0;i<64;i++)
69                         gamma[i] = (int)((pow(intensity, 1.0/g)*i) + 0.5);
70                 for (i=0;i<256;i++) {
71                         int c;
72                         c = gr_find_closest_color(gamma[gr_palette[i*3]],gamma[gr_palette[i*3+1]],gamma[gr_palette[i*3+2]]);
73                         gr_fade_table[14*256+i] = c;
74                 }
75         }
76
77         memcpy(last_palette_for_color_fonts,gr_palette,sizeof(last_palette_for_color_fonts));
78 }
79
80 //load a palette by name. returns 1 if new palette loaded, else 0
81 //if used_for_level is set, load pig, etc.
82 //if no_change_screen is set, the current screen does not get remapped,
83 //and the hardware palette does not get changed
84 int load_palette(char *name,int used_for_level,int no_change_screen)
85 {
86         char pigname[FILENAME_LEN];
87         ubyte old_pal[256*3];
88
89         //special hack to tell that palette system about a pig that's been loaded elsewhere
90         if (used_for_level == -2) {
91                 strncpy(last_palette_loaded_pig,name,sizeof(last_palette_loaded_pig));
92                 return 1;
93         }
94
95         if (name==NULL)
96                 name = last_palette_loaded_pig;
97
98         if (used_for_level && stricmp(last_palette_loaded_pig,name) != 0) {
99
100                 _splitpath(name,NULL,NULL,pigname,NULL);
101                 strcat(pigname,".pig");
102                 //if not editor, load pig first so small install message can come
103                 //up in old palette.  If editor version, we must load the pig after
104                 //the palette is loaded so we can remap new textures.
105                 #ifndef EDITOR
106                 piggy_new_pigfile(pigname);
107                 #endif
108         }
109
110         if (stricmp(last_palette_loaded,name) != 0) {
111
112                 memcpy(old_pal,gr_palette,sizeof(old_pal));
113
114                 strncpy(last_palette_loaded,name,sizeof(last_palette_loaded));
115
116                 gr_use_palette_table(name);
117
118                 if (Function_mode == FMODE_GAME && !no_change_screen)
119                         gr_remap_bitmap_good( &grd_curscreen->sc_canvas.cv_bitmap, old_pal, -1, -1 );
120
121         if (bg.bmp)
122             gr_remap_bitmap_good( bg.bmp, old_pal, -1, -1 );
123
124                 if (!gr_palette_faded_out && !no_change_screen)
125                         gr_palette_load(gr_palette);
126
127                 remap_fonts_and_menus(0);
128
129                 Color_0_31_0 = -1;              //for gauges
130                 HUD_color = -1;
131
132                 load_background_bitmap();
133
134                 g3_remap_interp_colors();
135         }
136
137
138         if (used_for_level && stricmp(last_palette_loaded_pig,name) != 0) {
139
140                 strncpy(last_palette_loaded_pig,name,sizeof(last_palette_loaded_pig));
141
142                 #ifdef EDITOR
143                 piggy_new_pigfile(pigname);
144                 #endif
145
146                 texmerge_flush();
147                 rle_cache_flush();
148         }
149
150         return 1;
151 }
152