29 #define MAX_LOG_ENTRIES 700
30 #define MAX_LOG_LINES 1000
33 #define LOG_CULL_MARK ((int)(MAX_LOG_ENTRIES * 0.95f))
34 #define LOG_CULL_DOORDIE_MARK ((int)(MAX_LOG_ENTRIES * 0.99f))
35 #define LOG_LAST_DITCH_CULL_NUM ((int)(MAX_LOG_ENTRIES * 0.20f))
36 #define LOG_HALFWAY_REPORT_NUM ((int)(MAX_LOG_ENTRIES * 0.50f))
38 #define EMPTY_LOG_NAME ""
45 #define LOG_COLOR_NORMAL 0
46 #define LOG_COLOR_BRIGHT 1
47 #define LOG_COLOR_OTHER 2
48 #define NUM_LOG_COLORS 3
51 #define LOG_FLAG_GOAL_FAILED (1<<0)
52 #define LOG_FLAG_GOAL_TRUE (1<<1)
63 static int X, P_width;
77 memset( log_entries, 0,
sizeof(log_entries) );
93 nprintf((
"missionlog",
"culling obsolete entries. starting last entry %d.\n",
last_entry));
100 if ( i == last_entry )
116 log_entries[i++] = log_entries[index++];
117 }
while ( i < last_entry );
120 nprintf((
"missionlog",
"Ending entry: %d.\n", last_entry));
135 entry = &log_entries[
i];
157 entry = &log_entries[
i];
170 nprintf((
"missionlog",
"removing the first %d entries in the mission log!!!!\n", LOG_LAST_DITCH_CULL_NUM));
220 entry->
index = info_index;
295 nprintf((
"missionlog",
"No secondary name for ship destroyed log entry!\n"));
342 if ( (
Wings[index].total_destroyed +
Wings[index].total_vanished) ==
Wings[index].total_arrived_count ){
350 if( log_entries[i].index == index ){
354 if ( i == last_entry ){
383 nprintf((
"missionlog",
"new highwater point reached for mission log (%d entries).\n",
last_entry));
435 entry = &log_entries[0];
440 if ( entry->
type == type ) {
470 if ( (sname == NULL) || !
stricmp(sname, entry->
sname) ) {
511 entry = &log_entries[0];
515 if ( entry->
type == type ) {
539 if ( (sname == NULL) || !
stricmp(sname, entry->
sname) ) {
557 parent = &Log_lines[
n];
559 parent = &((*parent)->next);
564 seg->
color = msg_color;
573 if (!source_string) {
574 mprintf((
"Why are you passing a NULL pointer to message_log_add_segs?\n"));
577 if (!*source_string) {
584 char *dup_string =
vm_strdup(source_string);
585 char *str = dup_string;
658 Log_line_timestamps[
i] = 0;
662 entry = &log_entries[
i];
699 switch (entry->
type) {
702 if (strlen(entry->
sname)) {
705 if (entry->
index >= 0) {
725 if (entry->
index > 1){
747 int si_index, model_index;
749 si_index = (
int)((entry->
index >> 16) & 0xffff);
750 model_index = (
int)(entry->
index & 0xffff);
754 const char *subsys_name =
Ship_info[si_index].subsystems[model_index].subobj_name;
756 subsys_name =
XSTR(
"Turret", 1487);
859 while (y + font_h <= list_h) {
863 if (Log_line_timestamps[line]) {
868 seg = Log_lines[line];
870 switch (seg->
color) {
909 i = list_y + y + font_h / 2 - 1;
int timestamp(int delta_ms)
#define MULTIPLAYER_CLIENT
#define LOG_CULL_DOORDIE_MARK
#define LOG_PLAYER_CALLED_FOR_REARM
void mission_log_add_entry(int type, char *pname, char *sname, int info_index)
color * iff_get_color_by_team(int team, int seen_from_team, int is_bright)
struct log_text_seg log_text_seg
#define LOG_SHIP_SUBSYS_DESTROYED
__inline void gr_circle(int xc, int yc, int d, int resize_mode=GR_RESIZE_FULL)
int message_log_color_get_team(int msg_color)
void message_log_init_scrollback(int pw)
void mission_log_cull_obsolete_entries()
__inline void gr_string(int x, int y, const char *string, int resize_mode=GR_RESIZE_FULL)
int subsystem_stricmp(const char *str1, const char *str2)
#define LOG_WING_DEPARTED
#define LOG_SHIP_UNDOCKED
#define LOG_SHIP_DEPARTED
void message_log_shutdown_scrollback()
#define LOG_LAST_DITCH_CULL_NUM
void mission_log_add_entry_multi(int type, char *pname, char *sname, int index, fix timestamp, int flags)
int ship_find_exited_ship_by_name(char *name)
void gr_print_timestamp(int x, int y, fix timestamp, int resize_mode)
void gr_set_color_fast(color *dst)
#define MAX_SHIPS_PER_WING
void mission_log_obsolete_entries(int type, char *pname)
log_entry log_entries[MAX_LOG_ENTRIES]
GLenum GLuint GLenum GLsizei const GLchar * buf
mission_goal Mission_goals[MAX_GOALS]
Container & split(Container &result, const typename Container::value_type &s, const typename Container::value_type &delimiters, split_struct::empties_t empties=split_struct::empties_ok)
typedef int(SCP_EXT_CALLCONV *SCPDLL_PFVERSION)(SCPDLL_Version *)
#define LOG_FLAG_GOAL_FAILED
#define NETINFO_FLAG_AM_MASTER
int mission_log_get_time(int type, char *pname, char *sname, fix *time)
#define LOG_WING_DESTROYED
#define LOG_SHIP_DISABLED
int mission_log_get_time_indexed(int type, char *pname, char *sname, int count, fix *time)
#define LOG_GOAL_SATISFIED
int mission_log_query_scrollback_size()
sprintf(buf,"(%f,%f,%f)", v3->xyz.x, v3->xyz.y, v3->xyz.z)
#define LOG_CAP_SUBSYS_CARGO_REVEALED
int multi_find_player_by_callsign(const char *callsign)
GLint GLint GLint GLint GLint x
object Objects[MAX_OBJECTS]
const char * XSTR(const char *str, int index)
int message_log_team_get_color(int team)
#define LOG_SHIP_DESTROYED
bool end_string_at_first_hash_symbol(char *src)
int wing_name_lookup(const char *name, int ignore_count)
__inline void gr_line(int x1, int y1, int x2, int y2, int resize_mode=GR_RESIZE_FULL)
void mission_log_scrollback(int line, int list_x, int list_y, int list_w, int list_h)
int mission_log_get_count(int type, char *pname, char *sname)
void message_log_add_seg(int n, int x, int msg_color, const char *text, int flags=0)
#define LOG_PLAYER_CALLED_FOR_REINFORCEMENT
#define LOG_HALFWAY_REPORT_NUM
int gr_force_fit_string(char *str, int max_str, int max_width)
#define LOG_FLAG_GOAL_TRUE
void gr_get_string_size(int *w, int *h, const char *text, int len=9999)
char * split_str_once(char *src, int max_pixel_w)
void message_log_remove_segs(int n)
#define MULTIPLAYER_MASTER
SCP_vector< ship_info > Ship_info
int multi_get_player_ship(int np_index)
#define LOG_CARGO_REVEALED
SCP_vector< exited_ship > Ships_exited
const char * Goal_type_text(int n)
void send_mission_log_packet(int num)
int ship_index[MAX_SHIPS_PER_WING]
int is_white_space(char ch)
#define LOG_WAYPOINTS_DONE
void message_log_add_segs(const char *source_string, int msg_color, int flags=0)
int ship_name_lookup(const char *name, int inc_players)
net_player Net_players[MAX_PLAYERS]
#define LOG_SHIP_DISARMED
#define LOG_PLAYER_ABORTED_REARM
#define LOG_SELF_DESTRUCTED