diff --git a/xqf/ChangeLog b/xqf/ChangeLog index a27567b..0f6c28e 100644 --- a/xqf/ChangeLog +++ b/xqf/ChangeLog @@ -1,3 +1,10 @@ +Sep 28, 2001: Ludwig Nussel +- added support for games using the gamespy protocol +- added q3,ut,sof,nolf,rally masters,turok2 and shogo masters +- made game names translatable +- updated german translation +- changed version to 0.9.7b + Sep 27, 2001: Ludwig Nussel - more translatable strings marked - updated german translation diff --git a/xqf/configure.in b/xqf/configure.in index 3e54f3d..b8537a2 100644 --- a/xqf/configure.in +++ b/xqf/configure.in @@ -5,7 +5,7 @@ AC_INIT(src/xqf.c) -AM_INIT_AUTOMAKE(xqf, 0.9.7a) +AM_INIT_AUTOMAKE(xqf, 0.9.7b) dnl AM_CONFIG_HEADER(src/gnuconfig.h:src/gnuconfig.h.in) AM_CONFIG_HEADER(src/gnuconfig.h) diff --git a/xqf/po/POTFILES.in b/xqf/po/POTFILES.in index 48fef01..95828fd 100644 --- a/xqf/po/POTFILES.in +++ b/xqf/po/POTFILES.in @@ -9,7 +9,7 @@ src/dialogs.c #src/dns.c src/filter.c src/flt-player.c -#src/game.c +src/game.c #src/history.c #src/host.c src/launch.c diff --git a/xqf/po/de.po b/xqf/po/de.po index 1a7f018..7952dd1 100644 --- a/xqf/po/de.po +++ b/xqf/po/de.po @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2001-09-27 23:37+0200\n" -"PO-Revision-Date: 2001-09-27 23:38+GMT\n" +"POT-Creation-Date: 2001-09-28 11:43+0200\n" +"PO-Revision-Date: 2001-09-28 11:43+GMT\n" "Last-Translator: Ludwig Nussel \n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -218,6 +218,12 @@ msgstr "Hoch" msgid "Down" msgstr "Runter" +#. server_type +#. flags +#: src/game.c:431 +msgid "Generic Gamespy" +msgstr "Allgemein Gamespy" + #: src/launch.c:72 src/launch.c:191 msgid "XQF: ERROR!" msgstr "XQF: Fehler!" @@ -647,6 +653,10 @@ msgstr "" "In Datei %s kann nicht geschrieben werden\n" "Fehler: %s\n" +#: src/source.c:1022 +msgid "Favorites" +msgstr "Favoriten" + #: src/srv-prop.c:332 msgid "IP Address:" msgstr "IP Adresse:" diff --git a/xqf/src/game.c b/xqf/src/game.c index 28e72f6..85d2c5f 100644 --- a/xqf/src/game.c +++ b/xqf/src/game.c @@ -77,6 +77,7 @@ static int wo_exec (const struct condef *con, int forkit); static int q2_exec_generic (const struct condef *con, int forkit); static int ut_exec (const struct condef *con, int forkit); static int t2_exec (const struct condef *con, int forkit); +static int gamespy_exec (const struct condef *con, int forkit); static GList *q1_custom_cfgs (char *dir, char *game); static GList *qw_custom_cfgs (char *dir, char *game); @@ -423,6 +424,28 @@ struct game games[] = { quake_save_info }, #endif + // any game using the gamespy protocol + { + GPS_SERVER, // server_type + GAME_CONNECT, // flags + N_("Generic Gamespy"), // name + GPS_DEFAULT_PORT, // default_port + 0, // default_master_port + "GPS", // id + "GPS", // qstat_str + "-gps", // qstat_option + "gps", // qstat_master_option + &gamespy3d_pix, // pixmap + + un_parse_player, // parse_player + quake_parse_server, // parse_server + un_analyze_serverinfo, // analyze_serverinfo + config_is_valid_generic, // config_is_valid + NULL, // write_config + gamespy_exec, // exec_client + NULL, // custom_cfgs + quake_save_info // save_info + }, { UNKNOWN_SERVER, @@ -514,7 +537,7 @@ GtkWidget *game_pixmap_with_label (enum server_type type) { gtk_widget_show (pixmap); } - label = gtk_label_new (games[type].name); + label = gtk_label_new (_(games[type].name)); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); gtk_widget_show (label); @@ -1044,7 +1067,6 @@ static void q3_analyze_serverinfo (struct server *s) { { s->type=Q3_SERVER; } - } else if (strcmp (*info_ptr, "gamename") == 0) { @@ -1947,6 +1969,66 @@ static int ut_exec (const struct condef *con, int forkit) { return retval; } +// launch any game that uses the gamespy protocol +// the first argument is the content of gamename field (may be empty), +// the second one the ip of the server +static int gamespy_exec (const struct condef *con, int forkit) { + char *argv[32]; + int argi = 0; + char *cmd; + struct game *g = NULL; + int retval; + char **info_ptr; + char* gamename=""; + + char* hostport=NULL; + char* real_server=NULL; + + if(!con || !con->s) + return 1; + + g = &games[con->s->type]; + + cmd = strdup_strip (g->cmd); + + argv[argi++] = strtok (cmd, delim); + while ((argv[argi] = strtok (NULL, delim)) != NULL) + argi++; + + // go through all server rules + for (info_ptr = con->s->info; info_ptr && *info_ptr; info_ptr += 2) { + if (!strcmp (*info_ptr, "gamename")) { + gamename=info_ptr[1]; + } + else if (!strcmp (*info_ptr, "hostport")) { + hostport=info_ptr[1]; + } + } + + argv[argi++] = strdup_strip (gamename); + + if (con->server) { + // gamespy port can be different from game port + if(hostport) + { + real_server = g_strdup_printf ("%s:%s", inet_ntoa (con->s->host->ip), hostport); + argv[argi++] = real_server; + } + else + { + argv[argi++] = con->server; + } + } + + argv[argi] = NULL; + + retval = client_launch_exec (forkit, g->real_dir, argv, con->s); + + g_free (cmd); + g_free (real_server); + return retval; +} + static int t2_exec (const struct condef *con, int forkit) { char *argv[32]; int argi = 0; diff --git a/xqf/src/pixmaps.c b/xqf/src/pixmaps.c index d6da151..f83012f 100644 --- a/xqf/src/pixmaps.c +++ b/xqf/src/pixmaps.c @@ -51,6 +51,8 @@ #include "xpm/hr2.xpm" #include "xpm/un.xpm" +#include "xpm/gamespy3d.xpm" + #include "xpm/green-plus.xpm" #include "xpm/red-minus.xpm" @@ -101,6 +103,7 @@ struct pixmap sfs_pix; struct pixmap t2_pix; struct pixmap hr_pix; struct pixmap un_pix; +struct pixmap gamespy3d_pix; struct pixmap gplus_pix; struct pixmap rminus_pix; @@ -200,6 +203,7 @@ void free_pixmaps (void) { free_pixmap (&t2_pix); free_pixmap (&hr_pix); free_pixmap (&un_pix); + free_pixmap (&gamespy3d_pix); free_pixmap (&gplus_pix); free_pixmap (&rminus_pix); @@ -268,6 +272,7 @@ void init_pixmaps (GtkWidget *window) { create_pixmap (window, &t2_pix, t2_xpm); create_pixmap (window, &hr_pix, hr2_xpm); create_pixmap (window, &un_pix, un_xpm); + create_pixmap (window, &gamespy3d_pix, gamespy3d_xpm); create_pixmap (window, &gplus_pix, green_plus_xpm); create_pixmap (window, &rminus_pix, red_minus_xpm); diff --git a/xqf/src/pixmaps.h b/xqf/src/pixmaps.h index 55cb337..bd3a11d 100644 --- a/xqf/src/pixmaps.h +++ b/xqf/src/pixmaps.h @@ -60,6 +60,7 @@ extern struct pixmap sfs_pix; extern struct pixmap t2_pix; extern struct pixmap hr_pix; extern struct pixmap un_pix; +extern struct pixmap gamespy3d_pix; extern struct pixmap gplus_pix; extern struct pixmap rminus_pix; diff --git a/xqf/src/source.c b/xqf/src/source.c index c4f844e..1ef9051 100644 --- a/xqf/src/source.c +++ b/xqf/src/source.c @@ -818,6 +818,7 @@ static char *builtin_masters_update_info[] = { "ADD Q3S master://master3.idsoftware.com id", "ADD Q3S master://q3master.splatterworld.de Germany", "ADD Q3S master://q3.golsyd.net.au Australia", + "ADD Q3S master://q3master.barrysworld.com:27950 BarrysWorld", #endif "ADD SNS http://www.gameaholic.com/servers/qspy-sin Gameaholic.Com", @@ -835,6 +836,7 @@ static char *builtin_masters_update_info[] = { #ifdef QSTAT_HAS_UNREAL_SUPPORT "ADD UNS gmaster://unreal.epicgames.com:28900 Epic", + "ADD UNS gmaster://utmaster.barrysworld.com:28909 BarrysWorld", #endif "ADD T2S master://198.74.33.29:28002 NA West1", @@ -845,6 +847,12 @@ static char *builtin_masters_update_info[] = { "ADD WOS master://wolf.idsoftware.com:27950 id", + "ADD SFS http://www.gameaholic.com/servers/qspy-soldieroffortune gameaholic.com", + "ADD GPS http://www.gameaholic.com/servers/qspy-noonelivesforever Noone Lives Forevere - gameaholic.com", + "ADD GPS http://www.gameaholic.com/servers/qspy-rallymasters Rally Masters - gameaholic.com", + "ADD GPS http://www.gameaholic.com/servers/qspy-turok2 Turok 2 - gameaholic.com", + "ADD GPS http://www.gameaholic.com/servers/qspy-shogo Shogo - gameaholic.com", + NULL }; diff --git a/xqf/src/xpm/gamespy3d.xpm b/xqf/src/xpm/gamespy3d.xpm new file mode 100644 index 0000000..d2cd8cf --- /dev/null +++ b/xqf/src/xpm/gamespy3d.xpm @@ -0,0 +1,36 @@ +/* XPM */ +static char * gamespy3d_xpm[] = { +"16 16 17 1", +" c None", +". c #00FF00", +"+ c #00DE00", +"@ c #00AE00", +"# c #007A00", +"$ c #004A00", +"% c #002E00", +"& c #39E939", +"* c #355635", +"= c #BDF4BD", +"- c #FFFFFF", +"; c #EFEFEF", +"> c #BFBFBF", +", c #B8B8B8", +"' c #7A7A7A", +") c #373737", +"! c #000000", +">>>>>!!-!!>>>>>>", +">>>>),,-,,'!>>>>", +">>>),*%'%*',!>>>", +">>),!$...@!),!>>", +">!,!!#...@$!')>>", +">')!%##$$#.@%,!>", +"!-!$.....@@%!,!!", +"---!%#%##%!!'--'", +"!,!%$$!##$@%!,!!", +"!')+.!!!#..$),!>", +">),%.#!!#..!,)>>", +">!)=.@!!#..&,!>>", +">>!)=&@@+&='-)>>", +">>>!!'---'!!);)>", +">>>>>!!-!!>>!);)", +">>>>>>!-!>>>>!)-"}; diff --git a/xqf/src/xqf-ui.c b/xqf/src/xqf-ui.c index 9eb465e..8d29a52 100644 --- a/xqf/src/xqf-ui.c +++ b/xqf/src/xqf-ui.c @@ -280,7 +280,7 @@ void source_ctree_show_node_status (GtkWidget *ctree, struct master *m) { gtk_ctree_get_node_info (GTK_CTREE (ctree), node, NULL, NULL, NULL, NULL, NULL, NULL, &is_leaf, &expanded); - gtk_ctree_set_node_info (GTK_CTREE (ctree), node, m->name, 4, + gtk_ctree_set_node_info (GTK_CTREE (ctree), node, _(m->name), 4, (pix)? pix->pix : NULL, (pix)? pix->mask : NULL, (pix)? pix->pix : NULL, (pix)? pix->mask : NULL, is_leaf, expanded); diff --git a/xqf/src/xqf.h b/xqf/src/xqf.h index 7f00d59..2ad6de6 100644 --- a/xqf/src/xqf.h +++ b/xqf/src/xqf.h @@ -57,6 +57,7 @@ #define T2_DEFAULT_PORT 28000 /* Tribes 2 */ #define HR_DEFAULT_PORT 28910 /* Heretic2 */ #define UN_DEFAULT_PORT 7777 /* Unreal */ +#define GPS_DEFAULT_PORT 27888 /* Gamespy Generic */ #define QWM_DEFAULT_PORT 27000 /* QuakeWorld */ #define Q2M_DEFAULT_PORT 27900 /* Quake2 master */ @@ -99,6 +100,7 @@ enum server_type { #ifdef QSTAT_HAS_UNREAL_SUPPORT UN_SERVER, #endif + GPS_SERVER, UNKNOWN_SERVER };