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