FS2_Open
Open source remastering of the Freespace 2 engine
systemvars.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) Volition, Inc. 1999. All rights reserved.
3  *
4  * All source code herein is the property of Volition, Inc. You may not sell
5  * or otherwise commercially exploit the source or things you created based on the
6  * source.
7  *
8 */
9 
10 
11 
12 #ifndef _SYSTEMVARS_H
13 #define _SYSTEMVARS_H
14 
15 #include "globalincs/pstypes.h"
16 #include "math.h"
17 
18 #define GM_MULTIPLAYER (1 << 0)
19 #define GM_NORMAL (1 << 1)
20 #define GM_DEAD_DIED (1 << 2) // Died, waiting to blow up.
21 #define GM_DEAD_BLEW_UP (1 << 3) // Blew up.
22 #define GM_DEAD_ABORTED (1 << 4) // Player pressed a key, aborting death sequence.
23 #define GM_IN_MISSION (1 << 5) // Player is actually in the mission -- not at a pre-mission menu
24 
25 #define GM_DEAD (GM_DEAD_DIED | GM_DEAD_BLEW_UP | GM_DEAD_ABORTED)
26 
27 #define GM_STANDALONE_SERVER (1 << 8)
28 #define GM_STATS_TRANSFER (1 << 9) // in the process of stats transfer
29 #define GM_CAMPAIGN_MODE (1 << 10) // are we currently in a campaign.
30 
31 #define VM_EXTERNAL (1 << 0) // Set if not viewing from player position.
32 #define VM_TRACK (1 << 1) // Set if viewer is tracking target.
33 #define VM_DEAD_VIEW (1 << 2) // Set if viewer is watching from dead view.
34 #define VM_CHASE (1 << 3) // Chase view.
35 #define VM_OTHER_SHIP (1 << 4) // View from another ship.
36 #define VM_EXTERNAL_CAMERA_LOCKED (1 << 5) // External camera is locked in place (ie controls move ship not camera)
37 #define VM_WARP_CHASE (1 << 6) // View while warping out (form normal view mode)
38 #define VM_PADLOCK_UP (1 << 7)
39 #define VM_PADLOCK_REAR (1 << 8)
40 #define VM_PADLOCK_LEFT (1 << 9)
41 #define VM_PADLOCK_RIGHT (1 << 10)
42 #define VM_WARPIN_ANCHOR (1 << 11) // special warpin camera mode
43 #define VM_TOPDOWN (1 << 12) //Camera is looking down on ship
44 #define VM_FREECAMERA (1 << 13) //Camera is not attached to any particular object, probably under SEXP control
45 
46 #define VM_PADLOCK_ANY (VM_PADLOCK_UP|VM_PADLOCK_REAR|VM_PADLOCK_LEFT|VM_PADLOCK_RIGHT)
47 
48 //-----Cutscene stuff
49 //No bars
50 #define CUB_NONE 0
51 //List of types of bars
52 #define CUB_CUTSCENE (1<<0)
53 //Styles to get to bars
54 #define CUB_GRADUAL (1<<15)
56 extern int Cutscene_bar_flags;
57 
58 //-----Fadein stuff
59 struct shader;
60 extern shader Viewer_shader;
61 
62 enum FadeType {
66 };
67 extern FadeType Fade_type;
68 extern int Fade_start_timestamp;
69 extern int Fade_end_timestamp;
70 
71 
72 typedef struct vei {
73  angles_t angles; // Angles defining viewer location.
74  float distance; // Distance from which to view, plus 2x radius.
75 } vei;
76 
77 typedef struct vci {
79  float distance; // Distance from which to view, plus 3x radius
80 } vci;
81 
82 extern fix Missiontime;
83 extern fix Skybox_timestamp;
84 extern fix Frametime;
85 extern int Framecount;
86 
87 extern int Game_mode;
88 
89 #define SINGLEPLAYER !(Game_mode & GM_MULTIPLAYER)
90 
91 extern int Viewer_mode;
92 extern int Rand_count;
93 
94 extern int Game_restoring; // If set, this means we are restoring data from disk
95 
96 // The detail level. Anything below zero draws simple models earlier than it
97 // should. Anything above zero draws higher detail models longer than it should.
98 // -2=lowest
99 // -1=low
100 // 0=normal (medium)
101 // 1=high
102 // 2=extra high
103 extern int Game_detail_level;
104 
105 #define DETAIL_DEFAULT (0xFFFFFFFF)
106 
107 #define DETAIL_FLAG_STARS (1<<0) // draw the stars
108 #define DETAIL_FLAG_NEBULAS (1<<1) // draw the motion debris
109 #define DETAIL_FLAG_MOTION (1<<2) // draw the motion debris
110 #define DETAIL_FLAG_PLANETS (1<<3) // draw planets
111 #define DETAIL_FLAG_MODELS (1<<4) // draw models not as blobs
112 #define DETAIL_FLAG_LASERS (1<<5) // draw lasers not as pixels
113 #define DETAIL_FLAG_CLEAR (1<<6) // clear screen background after each frame
114 #define DETAIL_FLAG_HUD (1<<7) // draw hud stuff
115 #define DETAIL_FLAG_FIREBALLS (1<<8) // draw fireballs
116 #define DETAIL_FLAG_COLLISION (1<<9) // use good collision detection
117 
118 
119 extern uint Game_detail_flags;
120 
123 extern vci Viewer_chase_info;
124 extern vec3d leaning_position;
125 
126 extern int Is_standalone;
127 extern int Interface_framerate; // show interface framerate during flips
128 extern int Interface_last_tick; // last timer tick on flip
129 
130 #define NOISE_NUM_FRAMES 15
131 
132 // Noise numbers go from 0 to 1.0
133 extern float Noise[NOISE_NUM_FRAMES];
134 
135 
136 // override states to skip rendering of certain elements, but without disabling them completely
137 extern bool Basemap_override;
138 extern bool Envmap_override;
139 extern bool Specmap_override;
140 extern bool Normalmap_override;
141 extern bool Heightmap_override;
142 extern bool Glowpoint_override;
143 extern bool Glowpoint_use_depth_buffer;
144 extern bool GLSL_override;
145 extern bool PostProcessing_override;
146 extern bool Teamcolor_override;
147 extern bool Shadow_override;
148 
149 // game skill levels
150 #define NUM_SKILL_LEVELS 5
151 
152 //====================================================================================
153 // DETAIL LEVEL STUFF
154 // If you change any of this, be sure to increment the player file version
155 // in FreeSpace\ManagePilot.cpp and change Detail_defaults in SystemVars.cpp
156 // or bad things will happen, I promise.
157 //====================================================================================
158 
159 #define MAX_DETAIL_LEVEL 4 // The highest valid value for the "analog" detail level settings
160 
161 // If you change this, update player file in ManagePilot.cpp
162 typedef struct detail_levels {
163 
164  int setting; // Which default setting this was created from. 0=lowest... NUM_DEFAULT_DETAIL_LEVELS-1, -1=Custom
165 
166  // "Analogs"
167  int nebula_detail; // 0=lowest detail, MAX_DETAIL_LEVEL=highest detail
168  int detail_distance; // 0=lowest MAX_DETAIL_LEVEL=highest
169  int hardware_textures; // 0=max culling, MAX_DETAIL_LEVEL=no culling
170  int num_small_debris; // 0=min number, MAX_DETAIL_LEVEL=max number
171  int num_particles; // 0=min number, MAX_DETAIL_LEVEL=max number
172  int num_stars; // 0=min number, MAX_DETAIL_LEVEL=max number
173  int shield_effects; // 0=min, MAX_DETAIL_LEVEL=max
174  int lighting; // 0=min, MAX_DETAIL_LEVEL=max
175 
176  // Booleans
177  int targetview_model; // 0=off, 1=on
178  int planets_suns; // 0=off, 1=on
179  int weapon_extras; // extra weapon details. trails, glows
180 } detail_levels;
181 
182 // Global values used to access detail levels in game and libs
183 extern detail_levels Detail;
184 
185 #define NUM_DEFAULT_DETAIL_LEVELS 4 // How many "predefined" detail levels there are
186 
187 // Call this with:
188 // 0 - lowest
189 // NUM_DEFAULT_DETAIL_LEVELS - highest
190 // To set the parameters in Detail to some set of defaults
191 void detail_level_set(int level);
192 
193 // Returns the current detail level or -1 if custom.
195 
196 //=========================================================
197 // Functions to profile frame performance
198 
199 typedef struct profile_sample {
202  //char name[256];
204  uint start_time; // in microseconds
209  int parent;
211 
212 typedef struct profile_sample_history {
213  bool valid;
214  //char name[256];
216  float avg;
217  float min;
218  float max;
223 
225 
226 void profile_init();
227 void profile_deinit();
228 void profile_begin(const char* name);
229 void profile_begin(SCP_string &output_handle, const char* name);
230 void profile_end(const char* name);
231 void profile_dump_output();
232 void store_profile_in_history(SCP_string &name, float percent, uint time);
233 void get_profile_from_history(SCP_string &name, float* avg, float* min, float* max, uint *avg_micro_sec, uint *min_micro_sec, uint *max_micro_sec);
234 
236 {
238 public:
239  profile_auto(const char* profile_name): name(profile_name)
240  {
241  profile_begin(profile_name);
242  }
243 
245  {
246  profile_end(name.c_str());
247  }
248 };
249 
250 // Helper macro to encapsulate a single function call in a profile_begin()/profile_end() pair.
251 #define PROFILE(name, function) { profile_begin(name); function; profile_end(name); }
252 
253 //====================================================================================
254 // Memory stuff from WinDebug.cpp
255 extern int TotalRam;
257 
258 #define MAX_LIGHTS 256
259 #define MAX_LIGHT_LEVELS 16
260 
261 #define safe_kill(a) if(a)vm_free(a)
262 
263 
264 // Goober5000
265 void insertion_sort(void *array, size_t array_size, size_t element_size, int (*fncompare)(const void *, const void *));
266 
267 
268 #endif
int targetview_model
Definition: systemvars.h:177
void detail_level_set(int level)
Definition: systemvars.cpp:484
uint profile_instances
Definition: systemvars.h:200
int current_detail_level()
Definition: systemvars.cpp:500
FadeType
Definition: systemvars.h:62
bool Basemap_override
Definition: systemvars.cpp:70
bool Specmap_override
Definition: systemvars.cpp:72
int detail_distance
Definition: systemvars.h:168
bool Envmap_override
Definition: systemvars.cpp:71
int TotalRam
Definition: windebug.cpp:1580
void get_profile_from_history(SCP_string &name, float *avg, float *min, float *max, uint *avg_micro_sec, uint *min_micro_sec, uint *max_micro_sec)
Definition: profiling.cpp:326
uint Game_detail_flags
Definition: systemvars.cpp:52
struct detail_levels detail_levels
bool Teamcolor_override
Definition: systemvars.cpp:79
Definition: pstypes.h:88
void profile_begin(const char *name)
Definition: profiling.cpp:80
Definition: systemvars.h:72
int shield_effects
Definition: systemvars.h:173
detail_levels Detail
Definition: systemvars.cpp:478
int Fade_start_timestamp
Definition: systemvars.cpp:41
Definition: 2d.h:82
shader Viewer_shader
Definition: systemvars.cpp:39
fix Missiontime
Definition: systemvars.cpp:19
std::basic_string< char, std::char_traits< char >, std::allocator< char > > SCP_string
Definition: vmallocator.h:21
int Fade_end_timestamp
Definition: systemvars.cpp:42
Definition: systemvars.h:77
vci Viewer_chase_info
Definition: systemvars.cpp:56
int Game_detail_level
Definition: systemvars.cpp:51
float Noise[NOISE_NUM_FRAMES]
Definition: systemvars.cpp:83
int Game_mode
Definition: systemvars.cpp:24
void profile_init()
Called once at engine initialization to set the timer.
Definition: profiling.cpp:48
unsigned int uint
Definition: pstypes.h:64
bool GLSL_override
Definition: systemvars.cpp:77
FadeType Fade_type
Definition: systemvars.cpp:40
angles_t angles
Definition: systemvars.h:78
int Cutscene_bar_flags
Definition: systemvars.cpp:32
angles_t angles
Definition: systemvars.h:73
bool Glowpoint_override
Definition: systemvars.cpp:75
int Rand_count
Definition: systemvars.cpp:60
float Cutscene_delta_time
Definition: systemvars.cpp:34
int hardware_textures
Definition: systemvars.h:169
float distance
Definition: systemvars.h:74
void profile_end(const char *name)
Definition: profiling.cpp:130
struct profile_sample profile_sample
void profile_dump_output()
Definition: profiling.cpp:196
float Cutscene_bars_progress
Definition: systemvars.cpp:36
bool Heightmap_override
Definition: systemvars.cpp:74
long fix
Definition: pstypes.h:54
fix Skybox_timestamp
Definition: systemvars.cpp:20
bool Normalmap_override
Definition: systemvars.cpp:73
int Interface_framerate
Definition: fredstubs.cpp:173
GLuint const GLchar * name
Definition: Glext.h:5608
SCP_string name
Definition: systemvars.h:203
void insertion_sort(void *array, size_t array_size, size_t element_size, int(*fncompare)(const void *, const void *))
Definition: systemvars.cpp:599
int Viewer_mode
Definition: systemvars.cpp:28
struct vei vei
struct profile_sample_history profile_sample_history
bool Shadow_override
Definition: systemvars.cpp:80
int Framecount
Definition: systemvars.cpp:22
SCP_string profile_output
Definition: profiling.cpp:42
void store_profile_in_history(SCP_string &name, float percent, uint time)
Definition: profiling.cpp:263
struct vci vci
int Is_standalone
Definition: systemvars.cpp:59
bool Glowpoint_use_depth_buffer
Definition: systemvars.cpp:76
angles Viewer_slew_angles
Definition: systemvars.cpp:54
vec3d leaning_position
Definition: systemvars.cpp:57
bool PostProcessing_override
Definition: systemvars.cpp:78
fix Frametime
Definition: systemvars.cpp:21
vei Viewer_external_info
Definition: systemvars.cpp:55
void windebug_memwatch_init()
Definition: windebug.cpp:1645
uint children_sample_time
Definition: systemvars.h:206
void profile_deinit()
Definition: profiling.cpp:63
int num_small_debris
Definition: systemvars.h:170
GLint level
Definition: Glext.h:5180
#define NOISE_NUM_FRAMES
Definition: systemvars.h:130
int Interface_last_tick
Definition: systemvars.cpp:62
float distance
Definition: systemvars.h:79
profile_auto(const char *profile_name)
Definition: systemvars.h:239
int Game_restoring
Definition: systemvars.cpp:26