36 "SOURCE CODE PROJECT STAFF:\n" 
   40         "Fabian \"The E\" Woltermann\n" 
   44         "Ian \"Goober5000\" Warfield\n" 
   45         "Michael \"Zacam\" LaFleur\n" 
   47         "Edward \"Inquisitor\" Gardner\n" 
   48         "Cliff \"chief1983\" Gordon\n" 
   52         "Hassan \"Karajorma\" Kazmi\n" 
   53         "Derek \"Kazan\" Meek\n" 
   54         "Nick \"phreak\" Iannetta\n" 
   55         "Mike \"Bobboau\" Abegg\n" 
   56         "Backslash, Echelon9, Flaming_Sword\n" 
   57         "FUBAR, Iss Mneur, kkmic\n" 
   58         "Shade, Soulstorm, Sushi\n" 
   59         "Swifty, Wanderer, CommanderDJ\n" 
   60         "Valathil, MageKing17, Yarn\n" 
   61         "m!m, z64555, zookeeper\n" 
   67         "Peter \"Flipside\" Dibble\n" 
   71         "http://www.hard-light.net/\n" 
   72         "http://scp.indiegames.us/\n" 
   74         "Special thanks to:\n" 
   81         "Linux and OSX version with the support of\n" 
   82         "the icculus.org FreeSpace2 project:\n" 
   83         "Steven \"relnev\" Fuller\n" 
   90         "Very special thanks to:\n" 
   92         "Volition for making FS2 such a great game\n" 
   93         "Dave Baranec for giving us the code and keeping us sanity checked\n" 
   95         "FS2_Open makes use of the following technologies:\n" 
   97         "Ogg Vorbis - (C) 2005, Xiph.Org Foundation\n" 
   98         "JPEG - Independent JPEG Group, (C) 1991-1998, Thomas G. Lane\n" 
   99         "libpng - Copyright (C) 1998-2010 Glenn Randers-Pehrson\n" 
  100         "liblua - Copyright (C) 1994-2008 Lua.org, PUC-Rio\n" 
  101         "zlib - Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler\n" 
  102         "FXAA - Copyright (c) 2010 NVIDIA Corporation. All rights reserved.\n" 
  110 #define NUM_BUTTONS                             5 
  111 #define DEFAULT_NUM_IMAGES              46 
  113 #define TECH_DATABASE_BUTTON    0 
  114 #define SIMULATOR_BUTTON                1 
  115 #define CUTSCENES_BUTTON                2 
  116 #define CREDITS_BUTTON                  3 
  117 #define EXIT_BUTTON                             4 
  120 #define CREDITS_X_COORD 0 
  121 #define CREDITS_Y_COORD 1 
  122 #define CREDITS_W_COORD 2 
  123 #define CREDITS_H_COORD 3 
  160         credits_screen_buttons(
char *
name, 
int x1, 
int y1, 
int xt1, 
int yt1, 
int h) : filename(name), x(x1), y(y1), xt(xt1), yt(yt1), hotspot(h) {}
 
  163 static int Background_bitmap;
 
  192 static int      Credits_music_handle = -1;
 
  193 static int      Credits_music_begin_timestamp;
 
  195 static int      Credits_frametime;              
 
  196 static int      Credits_last_time;              
 
  197 static float Credits_counter;
 
  199 static int Credits_num_images;
 
  200 static int Credits_artwork_index;
 
  206 static int Credits_music_delay                          = 2000;
 
  207 static float Credits_scroll_rate                        = 15.0f;
 
  208 static float Credits_artwork_display_time       = 9.0f;
 
  209 static float Credits_artwork_fade_time          = 1.0f;
 
  213 static bool Credits_parsed;
 
  225         if ( Credits_music_handle != -1 ) {
 
  227                 Credits_music_handle = -1;
 
  233         if ( Credits_music_handle != -1 ){
 
  237         if ( fname && *fname ){
 
  244         if (Credits_music_handle != -1) {
 
  249                 nprintf((
"Warning", 
"Cannot play credits music\n"));
 
  298                                 Credits_num_images = 
temp;
 
  305                         if (Credits_artwork_index < 0)
 
  307                                 Credits_artwork_index = 0;
 
  309                         else if (Credits_artwork_index >= Credits_num_images)
 
  311                                 Credits_artwork_index = Credits_num_images - 1;
 
  317                         if (Credits_scroll_rate < 0.01
f)
 
  318                                 Credits_scroll_rate = 0.01f;
 
  323                         if (Credits_artwork_display_time < 0.01
f)
 
  324                                 Credits_artwork_display_time = 0.01f;
 
  329                         if (Credits_artwork_fade_time < 0.01
f)
 
  330                                 Credits_artwork_fade_time = 0.01f;
 
  339                                 SCP_credits_position = 
START;
 
  340                         else if (!
stricmp(mode, 
"End"))
 
  341                                 SCP_credits_position = 
END;
 
  355                 bool first_run = 
true;
 
  364                         if (first_run && !Credits_parsed && !line.compare(
mod_check))
 
  374                                 credits_text.append(
"\n");
 
  385                                 Assertion(lines.size() == (size_t)numLines, 
"split_str reported %d lines but vector contains " SIZE_T_ARG " entries!", numLines, lines.size());
 
  387                                 Assertion(lines.size() <= charNum.size(),
 
  388                                         "Something has gone wrong while splitting strings. Got " SIZE_T_ARG " lines but only " SIZE_T_ARG " chacter lengths.",
 
  389                                         lines.size(), charNum.size());
 
  392                                 for (
int i = 0; 
i < numLines; 
i++)
 
  394                                         credits_text.append(
SCP_string(lines[
i], charNum[i]));
 
  395                                         credits_text.append(
"\n");
 
  400                 Credit_text_parts.push_back(credits_text);
 
  402                 Credits_parsed = 
true;
 
  406                 mprintf((
"TABLES: Unable to parse '%s'!  Error message = %s.\n", filename, e.what()));
 
  427         Credits_artwork_index = -1;
 
  430         strcpy_s(Credits_music_name, 
"Cinema");
 
  433         Credits_parsed = 
false;
 
  438         if (Credits_artwork_index < 0) {
 
  439                 Credits_artwork_index = rand() % Credits_num_images;
 
  443         if(credits_spooled_music_index != -1){
 
  445                 if(credits_wavfile_name != NULL){
 
  451         Credits_music_begin_timestamp = 
timestamp(Credits_music_delay);
 
  453         Credits_frametime = 0;
 
  458                 Credit_text_parts.push_back(
SCP_string(
"No credits available.\n"));
 
  462                 switch (SCP_credits_position)
 
  473                                 Error(
LOCATION, 
"Unimplemented credits position %d. Get a coder!", (
int) SCP_credits_position);
 
  481         for (iter = Credit_text_parts.begin(); iter != Credit_text_parts.end(); ++iter)
 
  483                 for (SCP_string::iterator ii = iter->begin(); ii != iter->end(); ++ii)
 
  596         for (iter = Credit_text_parts.begin(); iter != Credit_text_parts.end(); ++iter)
 
  637         Credits_bmps.resize(Credits_num_images);
 
  638         for (i=0; i<Credits_num_images; i++) {
 
  639                 Credits_bmps[
i] = -1;
 
  647         for (i=0; i<Credits_num_images; i++) {
 
  648                 if (Credits_bmps[i] >= 0){
 
  652         Credits_bmps.clear();
 
  656         Credit_text_parts.clear();
 
  658         if (Background_bitmap){
 
  668         int i, k, next, percent, bm1, bm2;
 
  669         int bx1, by1, bw1, bh1;
 
  670         int bx2, by2, bw2, bh2;
 
  674                 Credits_music_begin_timestamp = 0;
 
  712         if (Background_bitmap >= 0) {
 
  717         percent = (
int) (100.0
f - (Credits_artwork_display_time - Credits_counter) * 100.0f / Credits_artwork_fade_time);
 
  722         next = Credits_artwork_index + 1;
 
  723         if (next >= Credits_num_images){
 
  727         if (Credits_bmps[Credits_artwork_index] < 0) {
 
  731                         sprintf(buf, 
NOX(
"2_CrIm%.2d"), Credits_artwork_index);
 
  733                         sprintf(buf, 
NOX(
"CrIm%.2d"), Credits_artwork_index);
 
  735                 Credits_bmps[Credits_artwork_index] = 
bm_load(buf);
 
  738         if (Credits_bmps[next] < 0) {
 
  746                 Credits_bmps[next] = 
bm_load(buf);
 
  749         bm1 = Credits_bmps[Credits_artwork_index];
 
  750         bm2 = Credits_bmps[next];
 
  752         if((bm1 != -1) && (bm2 != -1)){
 
  753                 Assert(percent >= 0 && percent <= 100);
 
  794                         extern void gr_opengl_string(
float sx, 
float sy, 
const char *
s, 
int resize_mode);
 
  804         Credits_frametime = temp_time - Credits_last_time;
 
  805         Credits_last_time = temp_time;
 
  808         float fl_frametime = 
i2fl(Credits_frametime) / 1000.f;
 
  819         Credits_counter += fl_frametime;
 
  820         while (Credits_counter >= Credits_artwork_display_time) {
 
  821                 Credits_counter -= Credits_artwork_display_time;
 
  822                 Credits_artwork_index = next;
 
void set_highlight_action(void(*_user_function)(void))
 
int timestamp(int delta_ms)
 
char * fs2_open_credit_text
 
void add_XSTR(char *string, int _xstr_id, int _x, int _y, UI_GADGET *_assoc, int _color_type, int _font_id=-1)
 
GLfloat GLfloat GLfloat GLfloat h
 
void credits_stop_music(bool fade)
 
int check_for_string_raw(const char *pstr)
 
void stuff_string_line(char *outstr, int len)
 
void _cdecl void void _cdecl void _cdecl Warning(char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
 
#define GR_NUM_RESOLUTIONS
 
int bm_get_info(int handle, int *w, int *h, ubyte *flags, int *nframes, int *fps)
Gets info on the bitmap indexed by handle. 
 
#define Assertion(expr, msg,...)                                                                        
 
#define GR_MAYBE_CLEAR_RES(bmap)
 
void credits_parse_table(const char *filename)
 
void gr_set_color_fast(color *dst)
 
int Credits_image_coords[GR_NUM_RESOLUTIONS][4]
 
std::basic_string< char, std::char_traits< char >, std::allocator< char > > SCP_string
 
void gr_set_bitmap(int bitmap_num, int alphablend_mode, int bitblt_mode, float alpha)
 
GLenum GLuint GLenum GLsizei const GLchar * buf
 
int bm_release(int handle, int clear_render_targets)
Frees both a bitmap's data and it's associated slot. 
 
void stuff_float(float *f)
 
int audiostream_is_playing(int i)
 
void common_set_interface_palette(char *filename)
 
__inline void gr_set_clip(int x, int y, int w, int h, int resize_mode=GR_RESIZE_FULL)
 
void draw_forced(int frame_num)
 
typedef int(SCP_EXT_CALLCONV *SCPDLL_PFVERSION)(SCPDLL_Version *)
 
void set_mask_bmap(char *fname)
 
int set_bmaps(char *ani_filename, int nframes=3, int start_frame=1)
 
void credits_start_music()
 
void common_free_interface_palette()
 
#define TECH_DATABASE_BUTTON
 
Switching to a new screen, but not commit. 
 
void stuff_string(char *outstr, int type, int len, char *terminators)
 
sprintf(buf,"(%f,%f,%f)", v3->xyz.x, v3->xyz.y, v3->xyz.z)
 
void credits_do_frame(float frametime)
 
int credits_screen_button_pressed(int n)
 
int split_str(const char *src, int max_pixel_w, int *n_chars, const char **p_str, int max_lines, char ignore_char)
 
int optional_string(const char *pstr)
 
void gr_opengl_string(float sx, float sy, const char *s, int resize_mode)
 
void read_file_text(const char *filename, int mode, char *processed_text, char *raw_text)
 
void _cdecl void void _cdecl Error(const char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
 
menu_music Spooled_music[MAX_SPOOLED_MUSIC]
 
void set_hotkey(int keycode)
 
void reset_parse(char *text)
 
GLuint const GLchar * name
 
int bm_load(const char *real_filename)
Loads a bitmap so we can draw with it later. 
 
GLboolean GLboolean GLboolean b
 
void audiostream_close_file(int i, int fade)
 
void link_hotspot(int num)
 
GLint GLsizei GLsizei height
 
void create(UI_WINDOW *wnd, char *_text, int _x, int _y, int _w, int _h, int do_repeat=0, int ignore_focus=0)
 
#define UI_XSTR_COLOR_PINK
 
void create(int _x, int _y, int _w, int _h, int _flags, int _f_id=-1)
 
void gr_get_string_size(int *w, int *h, const char *text, int len=9999)
 
void credits_load_music(char *fname)
 
void timestamp_inc(int frametime_ms)
 
ubyte keyd_pressed[NUM_KEYS]
 
void common_play_highlight_sound()
 
float Master_event_music_volume
 
#define timestamp_elapsed(stamp)
 
void audiostream_play(int i, float volume, int looping)
 
void ignore_white_space()
 
char * unmodified_credits
 
int Credits_text_coords[GR_NUM_RESOLUTIONS][4]
 
int parse_modular_table(const char *name_check, void(*parse_callback)(const char *filename), int path_type, int sort_type)
 
void gr_bitmap(int _x, int _y, int resize_mode)
 
#define UI_XSTR_COLOR_GREEN
 
int event_music_get_spooled_music_index(const char *name)
 
int audiostream_open(const char *filename, int type)
 
#define PLAYER_FLAGS_IS_MULTI
 
void gamesnd_play_iface(int n)
 
void gr_set_font(int fontnum)
 
int process(int key_in=-1, int process_mouse=1)
 
int timer_get_milliseconds()
 
void gameseq_post_event(int event)
 
#define DEFAULT_NUM_IMAGES