diff --git a/src/menu-fn/defs.h b/src/menu-fn/defs.h index bd48d231..12f22259 100644 --- a/src/menu-fn/defs.h +++ b/src/menu-fn/defs.h @@ -18,6 +18,7 @@ var int autocvar_menu_intro = TRUE; var int autocvar__menu_singleplayer; +var bool autocvar_menu_steambg = false; #define KEY_UNKNOWN -1 #define KEY_GAME 0 @@ -59,50 +60,6 @@ typedef struct void(float evtype, float scanx, float chary, float devid) m_input; } menupage_t; -typedef enum -{ - GAMEINFO_NONE, - GAMEINFO_MANIFEST, - GAMEINFO_GITXT, - GAMEINFO_LIBLIST -} gi_type; - -typedef struct -{ - string game; - string gamedir; - string base_dir; - string url_info; - string url_dl; - string version; - string readme; - int size; - int svonly; - int cldll; - string type; - string hlversion; - string pkgname; - string pkgfile; - int pkgid; - int nomodels; - int nosprays; - int installed; - string mpentity; - string gamedll; - string startmap; - string trainingmap; - string fallback_dir; - string chatroom; - string menumap; - string introvideo; - int steambg; - gi_type info_type; -} gameinfo_t; - -var int gameinfo_current = -1; -int gameinfo_count; -gameinfo_t *games; - int g_menupage; enum diff --git a/src/menu-fn/entry.qc b/src/menu-fn/entry.qc index 8bddc9ad..3f9e77ef 100644 --- a/src/menu-fn/entry.qc +++ b/src/menu-fn/entry.qc @@ -84,6 +84,7 @@ void m_init(void) { vector g_btnsize; + string menuMap; print("--------- Initializing Menu ----------\n"); print("Built: " __DATE__ " " __TIME__"\n"); @@ -139,32 +140,25 @@ m_init(void) Strings_Init(); Updates_Init(); - if (games[gameinfo_current].gamedir != "valve" || games[gameinfo_current].steambg == 1) { + if (GameLibrary_GetInfo(GAMEINFO_GAMEDIR) != "valve") { m_intro_skip(); Music_MenuStart(); } - if (games[gameinfo_current].pkgfile != "") - if not (whichpack(games[gameinfo_current].pkgfile) || autocvar_menu_updating) { - /* reload in case of video restarts? */ - shaderforname("logo_avi", "{\n{\nvideomap av:media/logo.avi\n}\n}"); - g_menupage = PAGE_UPDATES; - } - Menu_AutoScale(); Menu_GammaHack(); if (g_intro_stage == 0) { - string videofile = games[gameinfo_current].introvideo; + string videofile = GameLibrary_GetInfo(GAMEINFO_INTROVIDEO); if (videofile) { localcmd(strcat("playvideo ", videofile, "\n")); } } - if (games[gameinfo_current].menumap != "") { - string mapname = games[gameinfo_current].menumap; - localcmd(strcat("map_background ", mapname, "\n")); + menuMap = GameLibrary_GetInfo(GAMEINFO_MENUMAP); + if (menuMap != "") { + localcmd(strcat("map_background ", menuMap, "\n")); } /* prepare spray logo keys */ @@ -285,7 +279,7 @@ m_draw(vector screensize) drawfill([0,0], screensize, [0,0,0], 1.0f); /* draw either WON or Steam background */ - if (games[gameinfo_current].steambg == 0) + if (autocvar_menu_steambg == false) Background_WON(); else Background_Steam(); diff --git a/src/menu-fn/m_chatrooms.qc b/src/menu-fn/m_chatrooms.qc index d1344c2b..733c4547 100644 --- a/src/menu-fn/m_chatrooms.qc +++ b/src/menu-fn/m_chatrooms.qc @@ -339,7 +339,7 @@ cr_makeconnection(void) string channel; i = TCP_Connect(&tcp_irc, "tcp://irc.frag-net.com:6667"); - channel = games[gameinfo_current].chatroom; + channel = GameLibrary_GetInfo(GAMEINFO_CHATROOM); /* we're already setting a default channel, but a mod might set it set it to something empty to mess with us */ diff --git a/src/menu-fn/m_creategame.qc b/src/menu-fn/m_creategame.qc index eb89aed9..b0b55443 100644 --- a/src/menu-fn/m_creategame.qc +++ b/src/menu-fn/m_creategame.qc @@ -196,7 +196,7 @@ menu_creategame_init(void) g_mapcount = search_getsize(mapsearch); for (i = 0; i < g_mapcount; i++) { string tmp, dir; - string gdir = games[gameinfo_current].gamedir; + string gdir = GameLibrary_GetInfo(GAMEINFO_GAMEDIR); int list = TRUE; tmp = substring(search_getfilename(mapsearch, i), 5, -1); diff --git a/src/menu-fn/m_customgame.qc b/src/menu-fn/m_customgame.qc index ca4cc3f2..bbef52db 100644 --- a/src/menu-fn/m_customgame.qc +++ b/src/menu-fn/m_customgame.qc @@ -86,9 +86,9 @@ customgame_sbmods_changed(int val) void customgame_lbmods_changed(void) { - int gid = customgame_lbMods.GetSelected(); + int gameID = customgame_lbMods.GetSelected(); - if (games[gid].installed == TRUE) { + if (GameLibrary_GetGameInfo(gameID, GAMEINFO_INSTALLED) == true) { customgame_btnActivate.SetExecute(customgame_btnactivate_start); customgame_btnInstall.SetExecute(__NULL__); } else { diff --git a/src/menu-fn/m_customize.qc b/src/menu-fn/m_customize.qc index a7e5bd16..1df108b4 100644 --- a/src/menu-fn/m_customize.qc +++ b/src/menu-fn/m_customize.qc @@ -224,8 +224,6 @@ menu_customize_init(void) } } search_end(searchy); - } else { - games[gameinfo_current].nosprays = 1; } /* scan and cache the models */ @@ -240,8 +238,6 @@ menu_customize_init(void) precache_pic(g_models[i]); } search_end(searchy); - } else { - games[gameinfo_current].nomodels = 1; } fn_customize = spawn(CWidget); @@ -299,7 +295,7 @@ menu_customize_init(void) cz_sldReceiveVol.SetCallback(cz_sldReceiveVolChanged); Widget_Add(fn_customize, cz_sldReceiveVol); - if (games[gameinfo_current].nosprays == 0) { + if (GameLibrary_GetInfo(GAMEINFO_NOSPRAYS) == false) { cz_psSpray = spawn(CPictureSwitch); cz_psSpray.SetPos(212,226); cz_psSpray.SetSize(99,124); @@ -312,7 +308,7 @@ menu_customize_init(void) Widget_Add(fn_customize, cz_psSpray); } - if (games[gameinfo_current].nomodels == 0) { + if (GameLibrary_GetInfo(GAMEINFO_NOPLAYERMODELS) == false) { #ifdef MODEL_PREVIEW static vector vecDistance = [ 45, 0, 0 ]; static void ModelPreview_SetModel( string strModel ) { @@ -485,7 +481,7 @@ menu_customize_draw(void) - if (games[gameinfo_current].nomodels == 0) { + if (GameLibrary_GetInfo(GAMEINFO_NOPLAYERMODELS) == false) { drawfill([g_menuofs[0] + 410,g_menuofs[1] + 160], [170, 221], FRAME_COLOR, 1.0f); drawfill([g_menuofs[0] + 413,g_menuofs[1] + 163], [164,190], [0,0,0], 1.0f); WLabel_Static(410, 390, "Colors", 14, 14, [1,1,1], @@ -516,7 +512,7 @@ menu_customize_draw(void) } #endif - if (games[gameinfo_current].nosprays == 0) + if (GameLibrary_GetInfo(GAMEINFO_NOSPRAYS) == false) WLabel_Static(212, 203, m_reslbl[IDS_PROFILE_LOGO], 14, 14, [1,1,1], 1.0f, 0, font_arial); diff --git a/src/menu-fn/m_main.qc b/src/menu-fn/m_main.qc index e6872cff..1f7624ef 100644 --- a/src/menu-fn/m_main.qc +++ b/src/menu-fn/m_main.qc @@ -78,7 +78,7 @@ btn_training(void) { localcmd("stopmusic\n"); localcmd("maxplayers 1\n"); - localcmd(games[gameinfo_current].trainingmap); + localcmd(GameLibrary_GetInfo(GAMEINFO_TRAININGMAP)); /* TODO: Some mods may choose to put movies in this... */ RichPresence_Clear(); @@ -195,7 +195,7 @@ menu_main_init(void) main_btnNewGame.SetImage(BTN_NEWGAME); main_btnNewGame.SetPos(70,208); /* new game not available in multiplayer_only */ - if (games[gameinfo_current].type != "Multiplayer") + if (GameLibrary_GetInfo(GAMEINFO_TYPE) != "Multiplayer") main_btnNewGame.SetExecute(btn_newgame_start); Widget_Add(fn_main, main_btnNewGame); @@ -204,7 +204,7 @@ menu_main_init(void) main_btnTraining.SetImage(BTN_TRAINING); main_btnTraining.SetPos(70,236); /* some mods actively try to hide the option */ - if (games[gameinfo_current].trainingmap != "") + if (GameLibrary_GetInfo(GAMEINFO_TRAININGMAP) != "") main_btnTraining.SetExecute(btn_training); Widget_Add(fn_main, main_btnTraining); @@ -220,7 +220,7 @@ menu_main_init(void) main_btnLoadGame.SetImage(BTN_LOADGAME); main_btnLoadGame.SetPos(70,292); /* disable in multiplayer_only */ - if (games[gameinfo_current].type != "Multiplayer") + if (GameLibrary_GetInfo(GAMEINFO_TYPE) != "Multiplayer") main_btnLoadGame.SetExecute(btn_loadgame_start); Widget_Add(fn_main, main_btnLoadGame); @@ -229,7 +229,7 @@ menu_main_init(void) main_btnMultiplayer.SetImage(BTN_MULTIPLAYER); main_btnMultiplayer.SetPos(70,320); /* disable when it's singleplayer_only */ - if (games[gameinfo_current].type != "Singleplayer") + if (GameLibrary_GetInfo(GAMEINFO_TYPE) != "Singleplayer") main_btnMultiplayer.SetExecute(btn_multiplayer_start); Widget_Add(fn_main, main_btnMultiplayer); @@ -296,14 +296,14 @@ menu_main_init(void) main_btn2NewGame.SetImage(BTN_NEWGAME); main_btn2NewGame.SetPos(70,236); /* disable in multiplayer_only */ - if (games[gameinfo_current].type != "Multiplayer") + if (GameLibrary_GetInfo(GAMEINFO_TYPE) != "Multiplayer") main_btn2NewGame.SetExecute(btn_newgame_start); Widget_Add(fn_main2, main_btn2NewGame); /* Training */ main_btn2Training = spawn(CMainButton); main_btn2Training.SetImage(BTN_TRAINING); - if (games[gameinfo_current].trainingmap) + if (GameLibrary_GetInfo(GAMEINFO_TRAININGMAP) != "") main_btn2Training.SetExecute(btn_training); main_btn2Training.SetPos(70,264); Widget_Add(fn_main2, main_btn2Training); @@ -320,7 +320,7 @@ menu_main_init(void) main_btn2LoadGame.SetImage(BTN_SAVELOAD); main_btn2LoadGame.SetPos(70,320); /* disable in multiplayer_only */ - if (games[gameinfo_current].type != "Multiplayer") + if (GameLibrary_GetInfo(GAMEINFO_TYPE) != "Multiplayer") main_btn2LoadGame.SetExecute(btn_loadgame_start); Widget_Add(fn_main2, main_btn2LoadGame); @@ -328,7 +328,7 @@ menu_main_init(void) main_btn2Multiplayer = spawn(CMainButton); main_btn2Multiplayer.SetImage(BTN_MULTIPLAYER); main_btn2Multiplayer.SetPos(70,348); - if (games[gameinfo_current].type != "Singleplayer") + if (GameLibrary_GetInfo(GAMEINFO_TYPE) != "Singleplayer") main_btn2Multiplayer.SetExecute(btn_multiplayer_start); Widget_Add(fn_main2, main_btn2Multiplayer); @@ -379,7 +379,7 @@ menu_main_draw(void) } else { #ifndef WEBMENU /* Don't even attempt to display the logo.avi otherwise */ - if (games[gameinfo_current].steambg == 0 && checkcommand("ffmpeg_videobitrate")) { + if (autocvar_menu_steambg == false && checkcommand("ffmpeg_videobitrate")) { drawpic([g_menuofs[0],g_menuofs[1] + 70], g_bmp[LOGO_AVI], g_logosize, [1,1,1], 1.0f); g_logosize = gecko_get_texture_extent(g_bmp[LOGO_AVI]); diff --git a/src/menu-fn/m_multiplayer.qc b/src/menu-fn/m_multiplayer.qc index eebd0824..bf3c04c8 100644 --- a/src/menu-fn/m_multiplayer.qc +++ b/src/menu-fn/m_multiplayer.qc @@ -171,6 +171,12 @@ mp_btndisconnect(void) RichPresence_Clear(); } +void +mp_btnquickstart(void) +{ + +} + void menu_multiplayer_init(void) { @@ -181,7 +187,7 @@ menu_multiplayer_init(void) /* unconnected menu */ mp_btnQuickstart = spawn(CMainButton); mp_btnQuickstart.SetImage(BTN_QUICKSTART); - //mp_btnQuickstart.SetExecute(btn_console); + mp_btnQuickstart.SetExecute(mp_btnquickstart); mp_btnQuickstart.SetPos(50,140); Widget_Add(fn_multiplayer, mp_btnQuickstart); diff --git a/src/menu-fn/m_newgame.qc b/src/menu-fn/m_newgame.qc index 7e572c5b..ea9795bb 100644 --- a/src/menu-fn/m_newgame.qc +++ b/src/menu-fn/m_newgame.qc @@ -28,7 +28,7 @@ ng_btneasy_start(void) g_menupage = PAGE_MAIN; localcmd("stopmusic\n"); localcmd("set skill 1; maxplayers 1\n"); - localcmd(games[gameinfo_current].startmap); + localcmd(GameLibrary_GetInfo(GAMEINFO_STARTMAP)); RichPresence_Clear(); RichPresence_Set("status", "Singleplayer: Easy"); } @@ -48,7 +48,7 @@ ng_btnnormal_start(void) g_menupage = PAGE_MAIN; localcmd("stopmusic\n"); localcmd("set skill 2; maxplayers 1\n"); - localcmd(games[gameinfo_current].startmap); + localcmd(GameLibrary_GetInfo(GAMEINFO_STARTMAP)); RichPresence_Clear(); RichPresence_Set("status", "Singleplayer: Normal"); } @@ -68,7 +68,7 @@ ng_btnhard_start(void) g_menupage = PAGE_MAIN; localcmd("stopmusic\n"); localcmd("set skill 3; maxplayers 1\n"); - localcmd(games[gameinfo_current].startmap); + localcmd(GameLibrary_GetInfo(GAMEINFO_STARTMAP)); RichPresence_Clear(); RichPresence_Set("status", "Singleplayer: Hard"); } diff --git a/src/menu-fn/m_updates.qc b/src/menu-fn/m_updates.qc index 1f16bac8..ee6a6ba5 100644 --- a/src/menu-fn/m_updates.qc +++ b/src/menu-fn/m_updates.qc @@ -176,10 +176,11 @@ menu_updates_draw(void) if (!g_updates_initialized) { int pkg_ready = 0; + string packages = GameLibrary_GetInfo(GAMEINFO_PACKAGELIST); /* we have no hard-coded list of supported packages, so query frag-net.com */ - if (!games[gameinfo_current].pkgname && !g_pkgname_updating) { - string gamedir = games[gameinfo_current].gamedir; + if (!packages && !g_pkgname_updating) { + string gamedir = GameLibrary_GetInfo(GAMEINFO_GAMEDIR); print(sprintf("Querying package names for %s\n", gamedir)); uri_get(sprintf("http://www.frag-net.com/dl/packages_%s", uri_escape(gamedir)), MODSERVER_REQ_PKGNAMES); g_pkgname_updating = 1; diff --git a/src/menu-fn/m_viewreadme.qc b/src/menu-fn/m_viewreadme.qc index 3d06032c..9b183f8b 100644 --- a/src/menu-fn/m_viewreadme.qc +++ b/src/menu-fn/m_viewreadme.qc @@ -71,7 +71,7 @@ menu_viewreadme_init(void) filestream rdme; string lstline; - rdme = fopen(games[gameinfo_current].readme, FILE_READ); + rdme = fopen(GameLibrary_GetInfo(GAMEINFO_READMEFILE), FILE_READ); if (rdme >= 0) { while((lstline = fgets(rdme))) { vr_lbReadme.AddWrapped(lstline); diff --git a/src/menu-fn/strings.qc b/src/menu-fn/strings.qc index cc5fb12d..443522d1 100644 --- a/src/menu-fn/strings.qc +++ b/src/menu-fn/strings.qc @@ -19,6 +19,7 @@ Strings_Init(void) { filestream stringslst; string lstline; + string gameTitle = GameLibrary_GetInfo(GAMEINFO_TITLE); m_reslbl[IDS_LANGUAGE] = _("IDS_LANGUAGE"); m_reslbl[IDS_BORDERLESS_REGFAIL] = _("IDS_BORDERLESS_REGFAIL"); @@ -209,19 +210,19 @@ Strings_Init(void) m_reslbl[IDS_LOADSAVE_RETURN] = _("IDS_LOADSAVE_RETURN"); m_reslbl[IDS_MAIN_RETURNHELP] = _("IDS_MAIN_RETURNHELP"); m_reslbl[IDS_MAIN_NEWGAMEHELP] = _("IDS_MAIN_NEWGAMEHELP"); - m_reslbl[IDS_MAIN_TRAININGHELP] = sprintf(_("IDS_MAIN_TRAININGHELP"), games[gameinfo_current].game); + m_reslbl[IDS_MAIN_TRAININGHELP] = sprintf(_("IDS_MAIN_TRAININGHELP"), gameTitle); m_reslbl[IDS_MAIN_LOADHELP] = _("IDS_MAIN_LOADHELP"); m_reslbl[IDS_MAIN_LOADSAVEHELP] = _("IDS_MAIN_LOADSAVEHELP"); m_reslbl[IDS_MAIN_CONFIGUREHELP] = _("IDS_MAIN_CONFIGUREHELP"); m_reslbl[IDS_MAIN_READMEHELP] = _("IDS_MAIN_READMEHELP"); - m_reslbl[IDS_MAIN_ORDERHELP] = sprintf(_("IDS_MAIN_ORDERHELP"), games[gameinfo_current].game); - m_reslbl[IDS_MAIN_QUITHELP] = sprintf(_("IDS_MAIN_QUITHELP"), games[gameinfo_current].game); + m_reslbl[IDS_MAIN_ORDERHELP] = sprintf(_("IDS_MAIN_ORDERHELP"), gameTitle); + m_reslbl[IDS_MAIN_QUITHELP] = sprintf(_("IDS_MAIN_QUITHELP"), gameTitle); m_reslbl[IDS_MAIN_QUICKHELP] = _("IDS_MAIN_QUICKHELP"); - m_reslbl[IDS_MAIN_MULTIPLAYERHELP] = sprintf(_("IDS_MAIN_MULTIPLAYERHELP"), games[gameinfo_current].game); + m_reslbl[IDS_MAIN_MULTIPLAYERHELP] = sprintf(_("IDS_MAIN_MULTIPLAYERHELP"), gameTitle); m_reslbl[IDS_CHAT_PROMPT] = _("IDS_CHAT_PROMPT"); - m_reslbl[IDS_NEWGAME_EASYHELP] = sprintf(_("IDS_NEWGAME_EASYHELP"), games[gameinfo_current].game); - m_reslbl[IDS_NEWGAME_MEDIUMHELP] = sprintf(_("IDS_NEWGAME_MEDIUMHELP"), games[gameinfo_current].game); - m_reslbl[IDS_NEWGAME_DIFFICULTHELP] = sprintf(_("IDS_NEWGAME_DIFFICULTHELP"), games[gameinfo_current].game); + m_reslbl[IDS_NEWGAME_EASYHELP] = sprintf(_("IDS_NEWGAME_EASYHELP"), gameTitle); + m_reslbl[IDS_NEWGAME_MEDIUMHELP] = sprintf(_("IDS_NEWGAME_MEDIUMHELP"), gameTitle); + m_reslbl[IDS_NEWGAME_DIFFICULTHELP] = sprintf(_("IDS_NEWGAME_DIFFICULTHELP"), gameTitle); m_reslbl[IDS_NEWGAME_RETURNHELP] = _("IDS_NEWGAME_RETURNHELP"); m_reslbl[IDS_NEWPROFILE_TITLE] = _("IDS_NEWPROFILE_TITLE"); m_reslbl[IDS_NEWPROFILE_NAME] = _("IDS_NEWPROFILE_NAME"); @@ -235,7 +236,7 @@ Strings_Init(void) m_reslbl[IDS_VIDEO_SCREENSIZE] = _("IDS_VIDEO_SCREENSIZE"); m_reslbl[IDS_VIDEO_GAMMA] = _("IDS_VIDEO_GAMMA"); m_reslbl[IDS_VIDEO_GLARE] = _("IDS_VIDEO_GLARE"); - m_reslbl[IDS_VIDEO_GAMMAHELP] = sprintf(_("IDS_VIDEO_GAMMAHELP"), games[gameinfo_current].game); + m_reslbl[IDS_VIDEO_GAMMAHELP] = sprintf(_("IDS_VIDEO_GAMMAHELP"), gameTitle); m_reslbl[IDS_VIDEO_GLAREHELP] = _("IDS_VIDEO_GLAREHELP"); m_reslbl[IDS_VIDMODE_WINDOWED] = _("IDS_VIDMODE_WINDOWED"); m_reslbl[IDS_VIDMODE_MOUSE] = _("IDS_VIDMODE_MOUSE"); @@ -254,7 +255,7 @@ Strings_Init(void) m_reslbl[IDS_STATUS_SKIPSERVER] = _("IDS_STATUS_SKIPSERVER"); m_reslbl[IDS_STATUS_ELPASEDTIME] = _("IDS_STATUS_ELPASEDTIME"); m_reslbl[IDS_TRAINING_EXITCURRENT] = _("IDS_TRAINING_EXITCURRENT"); - m_reslbl[IDS_MAIN_QUITPROMPTINGAME] = sprintf(_("IDS_MAIN_QUITPROMPTINGAME"), games[gameinfo_current].game); + m_reslbl[IDS_MAIN_QUITPROMPTINGAME] = sprintf(_("IDS_MAIN_QUITPROMPTINGAME"), gameTitle); m_reslbl[IDS_MAIN_QUITPROMPT] = _("IDS_MAIN_QUITPROMPT"); m_reslbl[IDS_CONTROLS_CANCELPROMPT] = _("IDS_CONTROLS_CANCELPROMPT"); m_reslbl[IDS_LOAD_LOADPROMPT] = _("IDS_LOAD_LOADPROMPT"); @@ -305,11 +306,11 @@ Strings_Init(void) m_reslbl[IDS_BTN_QUICK] = _("IDS_BTN_QUICK"); m_reslbl[IDS_PROFILE_LOGO] = _("IDS_PROFILE_LOGO"); m_reslbl[IDS_BTN_BROWSE] = _("IDS_BTN_BROWSE"); - m_reslbl[IDS_MULTI_BROWSEHELP] = sprintf(_("IDS_MULTI_BROWSEHELP"), games[gameinfo_current].game); + m_reslbl[IDS_MULTI_BROWSEHELP] = sprintf(_("IDS_MULTI_BROWSEHELP"), gameTitle); m_reslbl[IDS_BTN_CHAT] = _("IDS_BTN_CHAT"); - m_reslbl[IDS_MULTI_CHATHELP] = sprintf(_("IDS_MULTI_CHATHELP"), games[gameinfo_current].game); + m_reslbl[IDS_MULTI_CHATHELP] = sprintf(_("IDS_MULTI_CHATHELP"), gameTitle); m_reslbl[IDS_BTN_LAN] = _("IDS_BTN_LAN"); - m_reslbl[IDS_MULTI_LANHELP] = sprintf(_("IDS_MULTI_LANHELP"), games[gameinfo_current].game); + m_reslbl[IDS_MULTI_LANHELP] = sprintf(_("IDS_MULTI_LANHELP"), gameTitle); m_reslbl[IDS_BTN_CUSTOMIZE] = _("IDS_BTN_CUSTOMIZE"); m_reslbl[IDS_MULTI_CUSTOMIZEHELP] = _("IDS_MULTI_CUSTOMIZEHELP"); m_reslbl[IDS_CREATEROOM_ROOMPASSWORD] = _("IDS_CREATEROOM_ROOMPASSWORD"); @@ -340,12 +341,12 @@ Strings_Init(void) m_reslbl[IDS_QUICKSTART_TITLE] = _("IDS_QUICKSTART_TITLE"); m_reslbl[IDS_BTN_LISTROOMS] = _("IDS_BTN_LISTROOMS"); m_reslbl[IDS_BTN_GORE] = _("IDS_BTN_GORE"); - m_reslbl[IDS_BTN_AUTOPATCH] = sprintf(_("IDS_BTN_AUTOPATCH"), games[gameinfo_current].game); + m_reslbl[IDS_BTN_AUTOPATCH] = sprintf(_("IDS_BTN_AUTOPATCH"), gameTitle); m_reslbl[IDS_CONFIGURE_GOREHELP] = _("IDS_CONFIGURE_GOREHELP"); - m_reslbl[IDS_CONFIGURE_AUTOPATCHHELP] = sprintf(_("IDS_CONFIGURE_AUTOPATCHHELP"), games[gameinfo_current].game); + m_reslbl[IDS_CONFIGURE_AUTOPATCHHELP] = sprintf(_("IDS_CONFIGURE_AUTOPATCHHELP"), gameTitle); m_reslbl[IDS_CHAT_NOSERVERS] = _("IDS_CHAT_NOSERVERS"); m_reslbl[IDS_CHAT_NOPROFILE] = _("IDS_CHAT_NOPROFILE"); - m_reslbl[IDS_INIT_DX6REQUIRED] = sprintf(_("IDS_INIT_DX6REQUIRED"), games[gameinfo_current].game); + m_reslbl[IDS_INIT_DX6REQUIRED] = sprintf(_("IDS_INIT_DX6REQUIRED"), gameTitle); m_reslbl[IDS_FNET_VALIDATIONFAIL] = _("IDS_FNET_VALIDATIONFAIL"); m_reslbl[IDS_FNET_VALIDATIONFAIL2] = _("IDS_FNET_VALIDATIONFAIL2"); m_reslbl[IDS_FNET_AUTHOUTOFORDER] = _("IDS_FNET_AUTHOUTOFORDER"); @@ -353,7 +354,7 @@ Strings_Init(void) m_reslbl[IDS_FNET_ENCRYPTBAD] = _("IDS_FNET_ENCRYPTBAD"); m_reslbl[IDS_FNET_BADPUBLICKEY] = _("IDS_FNET_BADPUBLICKEY"); m_reslbl[IDS_FNET_AUTHNOMEM] = _("IDS_FNET_AUTHNOMEM"); - m_reslbl[IDS_CD_NEEDCDKEY] = sprintf(_("IDS_CD_NEEDCDKEY"), games[gameinfo_current].game); + m_reslbl[IDS_CD_NEEDCDKEY] = sprintf(_("IDS_CD_NEEDCDKEY"), gameTitle); m_reslbl[IDS_CD_BADKEY] = _("IDS_CD_BADKEY"); m_reslbl[IDS_CD_BADKEYTYPED] = _("IDS_CD_BADKEYTYPED"); m_reslbl[IDS_MD5_HASHFAIL] = _("IDS_MD5_HASHFAIL"); @@ -372,7 +373,7 @@ Strings_Init(void) m_reslbl[IDS_CHAT_NOROOMLIST] = _("IDS_CHAT_NOROOMLIST"); m_reslbl[IDS_SAVELOAD_NUMBEROFGAMESCHANGED] = _("IDS_SAVELOAD_NUMBEROFGAMESCHANGED"); m_reslbl[IDS_MAIN_EXITMULTIPLAYERPROMPT] = _("IDS_MAIN_EXITMULTIPLAYERPROMPT"); - m_reslbl[IDS_CD_ENTERPROMPT] = sprintf(_("IDS_CD_ENTERPROMPT"), games[gameinfo_current].game); + m_reslbl[IDS_CD_ENTERPROMPT] = sprintf(_("IDS_CD_ENTERPROMPT"), gameTitle); m_reslbl[IDS_MULTISELECT_EXITGAMEPROMPT] = _("IDS_MULTISELECT_EXITGAMEPROMPT"); m_reslbl[IDS_MULTI_ADDSERVERPROMPT] = _("IDS_MULTI_ADDSERVERPROMPT"); m_reslbl[IDS_ROOM_NEEDPASS] = _("IDS_ROOM_NEEDPASS"); @@ -416,7 +417,7 @@ Strings_Init(void) m_reslbl[IDS_GORE_BADPW] = _("IDS_GORE_BADPW"); m_reslbl[IDS_BTN_ADVANCEDSVR] = _("IDS_BTN_ADVANCEDSVR"); m_reslbl[IDS_OPTS_AUTOAIM] = _("IDS_OPTS_AUTOAIM"); - m_reslbl[IDS_OPTS_AUTOAIMHELP] = sprintf(_("IDS_OPTS_AUTOAIMHELP"), games[gameinfo_current].game); + m_reslbl[IDS_OPTS_AUTOAIMHELP] = sprintf(_("IDS_OPTS_AUTOAIMHELP"), gameTitle); m_reslbl[IDS_BTN_PREVIEWS] = _("IDS_BTN_PREVIEWS"); m_reslbl[IDS_MAIN_PREVIEWSHELP] = _("IDS_MAIN_PREVIEWSHELP"); m_reslbl[IDS_SECONDS_LEFT] = _("IDS_SECONDS_LEFT"); @@ -452,8 +453,8 @@ Strings_Init(void) m_reslbl[IDS_VID_RESELECT] = _("IDS_VID_RESELECT"); m_reslbl[IDS_VID_INITFAIL] = _("IDS_VID_INITFAIL"); m_reslbl[IDS_NET_FNETCONNFAIL] = _("IDS_NET_FNETCONNFAIL"); - m_reslbl[IDS_NET_CORRUPT] = sprintf(_("IDS_NET_CORRUPT"), games[gameinfo_current].game); - m_reslbl[IDS_CDKEY_BAD] = sprintf(_("IDS_CDKEY_BAD"), games[gameinfo_current].game); + m_reslbl[IDS_NET_CORRUPT] = sprintf(_("IDS_NET_CORRUPT"), gameTitle); + m_reslbl[IDS_CDKEY_BAD] = sprintf(_("IDS_CDKEY_BAD"), gameTitle); m_reslbl[IDS_MULTI_REFRESH] = _("IDS_MULTI_REFRESH"); m_reslbl[IDS_CHAT_NOROOM] = _("IDS_CHAT_NOROOM"); m_reslbl[IDS_RUN_PATCH] = _("IDS_RUN_PATCH"); @@ -464,7 +465,7 @@ Strings_Init(void) m_reslbl[IDS_LOGO_POWEROF2] = _("IDS_LOGO_POWEROF2"); m_reslbl[IDS_MODEM_CUSTOM] = _("IDS_MODEM_CUSTOM"); m_reslbl[IDS_MODEM_RATE] = _("IDS_MODEM_RATE"); - m_reslbl[IDS_REGISTRY_UPDATE] = sprintf(_("IDS_REGISTRY_UPDATE"), games[gameinfo_current].game); + m_reslbl[IDS_REGISTRY_UPDATE] = sprintf(_("IDS_REGISTRY_UPDATE"), gameTitle); m_reslbl[IDS_CHAT_JOIN] = _("IDS_CHAT_JOIN"); m_reslbl[IDS_CHAT_FLOOD] = _("IDS_CHAT_FLOOD"); m_reslbl[IDS_CHAT_SEARCH] = _("IDS_CHAT_SEARCH"); @@ -476,21 +477,21 @@ Strings_Init(void) m_reslbl[IDS_CHAT_NOSUCHROOM] = _("IDS_CHAT_NOSUCHROOM"); m_reslbl[IDS_CHAT_ROOMFULL] = _("IDS_CHAT_ROOMFULL"); m_reslbl[IDS_CREATESV_NOADVANCED] = _("IDS_CREATESV_NOADVANCED"); - m_reslbl[IDS_FNET_CDINUSE] = sprintf(_("IDS_FNET_CDINUSE"), games[gameinfo_current].game); + m_reslbl[IDS_FNET_CDINUSE] = sprintf(_("IDS_FNET_CDINUSE"), gameTitle); m_reslbl[IDS_CHAT_JOINHINT] = _("IDS_CHAT_JOINHINT"); m_reslbl[IDS_FNET_BANNED] = _("IDS_FNET_BANNED"); m_reslbl[IDS_CONTENT_NOMULTIPLAYER] = _("IDS_CONTENT_NOMULTIPLAYER"); - m_reslbl[IDS_PATCH_ERROR] = sprintf(_("IDS_PATCH_ERROR"), games[gameinfo_current].game); + m_reslbl[IDS_PATCH_ERROR] = sprintf(_("IDS_PATCH_ERROR"), gameTitle); m_reslbl[IDS_PATCH_NOUTIL] = _("IDS_PATCH_NOUTIL"); m_reslbl[IDS_PATCH_FAIL] = _("IDS_PATCH_FAIL"); - m_reslbl[IDS_PATCH_BADINSTALL] = sprintf(_("IDS_PATCH_BADINSTALL"), games[gameinfo_current].game); + m_reslbl[IDS_PATCH_BADINSTALL] = sprintf(_("IDS_PATCH_BADINSTALL"), gameTitle); m_reslbl[IDS_CONNECT_FAILURE] = _("IDS_CONNECT_FAILURE"); m_reslbl[IDS_MULTI_NEEDPASSWORD] = _("IDS_MULTI_NEEDPASSWORD"); m_reslbl[IDS_VID_HINT] = _("IDS_VID_HINT"); m_reslbl[IDS_MULTI_LOGODISCONNECT] = _("IDS_MULTI_LOGODISCONNECT"); - m_reslbl[IDS_3D_WARNING] = sprintf(_("IDS_3D_WARNING"), games[gameinfo_current].game); + m_reslbl[IDS_3D_WARNING] = sprintf(_("IDS_3D_WARNING"), gameTitle); m_reslbl[IDS_3DSITE_URL] = _("IDS_3DSITE_URL"); - m_reslbl[IDS_FNET_MODIFIED] = sprintf(_("IDS_FNET_MODIFIED"), games[gameinfo_current].game); + m_reslbl[IDS_FNET_MODIFIED] = sprintf(_("IDS_FNET_MODIFIED"), gameTitle); m_reslbl[IDS_ADVANCEDMP_OFFSETS] = _("IDS_ADVANCEDMP_OFFSETS"); m_reslbl[IDS_AUDIO_OFFSET] = _("IDS_AUDIO_OFFSET"); m_reslbl[IDS_CONFIGURE_OFFSET] = _("IDS_CONFIGURE_OFFSET"); @@ -559,7 +560,7 @@ Strings_Init(void) m_reslbl[IDS_NO] = _("IDS_NO"); m_reslbl[IDS_UPDATE] = _("IDS_UPDATE"); m_reslbl[IDS_MODREQ_TITLE] = _("IDS_MODREQ_TITLE"); - m_reslbl[IDS_DOWNLOAD_WARNING] = sprintf(_("IDS_DOWNLOAD_WARNING"), games[gameinfo_current].game); + m_reslbl[IDS_DOWNLOAD_WARNING] = sprintf(_("IDS_DOWNLOAD_WARNING"), gameTitle); m_reslbl[IDS_WARN_CHECKPROMPT] = _("IDS_WARN_CHECKPROMPT"); m_reslbl[IDS_MOD_VERSION] = _("IDS_MOD_VERSION"); m_reslbl[IDS_MOD_REINSTALL] = _("IDS_MOD_REINSTALL"); diff --git a/src/menu-fn/w_modlist.qc b/src/menu-fn/w_modlist.qc index ec2a3650..bad7c3a2 100644 --- a/src/menu-fn/w_modlist.qc +++ b/src/menu-fn/w_modlist.qc @@ -55,6 +55,13 @@ CModList::Draw(void) { int visible; int pos; + string gameType; + string gameTitle; + string gameURL; + int gameSize; + string gameVersion; + bool gameInstalled; + drawfill([g_menuofs[0] + m_x, g_menuofs[1] + m_y], [m_size[0], m_size[1]], [0,0,0], 1.0f); @@ -64,6 +71,13 @@ CModList::Draw(void) for (int i = m_scroll; i <= (visible + m_scroll); i++) { vector colo; + gameType = GameLibrary_GetGameInfo(i, GAMEINFO_TYPE); + gameTitle = GameLibrary_GetGameInfo(i, GAMEINFO_TITLE); + gameURL = GameLibrary_GetGameInfo(i, GAMEINFO_WEBSITE); + gameSize = GameLibrary_GetGameInfo(i, GAMEINFO_SIZE); + gameVersion = GameLibrary_GetGameInfo(i, GAMEINFO_VERSION); + gameInstalled = GameLibrary_GetGameInfo(i, GAMEINFO_INSTALLED); + if (m_selected == i) { colo = ML_COL_2; drawfill([g_menuofs[0] + m_x, g_menuofs[1] + pos], [m_size[0], 29], @@ -72,33 +86,33 @@ CModList::Draw(void) colo = ML_COL_1; } - if (games[i].type != "") { + if (gameType!= "") { drawsetcliparea(g_menuofs[0] + m_x + 2, g_menuofs[1] + pos + 3, 50,30); - WLabel_Static(m_x + 2, pos + 3, games[i].type, + WLabel_Static(m_x + 2, pos + 3, gameType, 11, 11, colo, 1.0f, 0, font_arial); drawresetcliparea(); } /* Game */ drawsetcliparea(g_menuofs[0] + m_x + 57, g_menuofs[1] + pos + 3, 112,30); - WLabel_Static(m_x + 57, pos + 3, games[i].game, 11, 11, colo, + WLabel_Static(m_x + 57, pos + 3, gameTitle, 11, 11, colo, 1.0f, 0, font_arial); drawresetcliparea(); /* URL */ - WLabel_Static(m_x + 2, pos + 18, sprintf("Info: %s", games[i].url_info), 11, 11, ML_COL_4, + WLabel_Static(m_x + 2, pos + 18, sprintf("Info: %s", gameURL), 11, 11, ML_COL_4, 1.0f, 0, font_arial); /* Version */ - WLabel_Static(m_x + 177, pos + 3, games[i].version, 11, 11, colo, + WLabel_Static(m_x + 177, pos + 3, gameVersion, 11, 11, colo, 1.0f, 0, font_arial); /* Size */ - float size = games[i].size / 1024000; + float size = gameSize / 1024000; WLabel_Static(m_x + 227, pos + 3, sprintf("%.1fmb", size), 11, 11, colo, 1.0f, 0, font_arial); /* Rating */ WLabel_Static(m_x + 277, pos + 3, "0.0", 11, 11, colo, 1.0f, 0, font_arial); - if (games[i].installed == 1) { + if (gameInstalled == true) { /* Installed */ WLabel_Static(m_x + 327, pos + 3, "Yes", 11, 11, ML_COL_3, 1.0f, 0, font_arial); diff --git a/src/platform/gamelibrary.h b/src/platform/gamelibrary.h index e8e4c4f1..bafebc80 100644 --- a/src/platform/gamelibrary.h +++ b/src/platform/gamelibrary.h @@ -14,6 +14,31 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +typedef enum +{ + GAMEINFO_TITLE, /**< (string) The title of the game. E.g. "Action Game" */ + GAMEINFO_GAMEDIR, /**< (string) The game directory name. E.g. "data" */ + GAMEINFO_FALLBACKDIR, /**< (string) The directory to be loaded before the game directory. */ + GAMEINFO_BASEDIR, /**< (string) The first game directory to be loaded. */ + GAMEINFO_WEBSITE, /**< (string) The game its official website. */ + GAMEINFO_VERSION, /**< (string) Version number string. */ + GAMEINFO_SIZE, /**< (int) The size of the game, in bytes. */ + GAMEINFO_TYPE, /**< (string) The game type. E.g. "Singleplayer" */ + GAMEINFO_NOPLAYERMODELS,/**< (bool) If the game allows player model selection. */ + GAMEINFO_NOSPRAYS, /**< (bool) If the game allows custom spray logos. */ + GAMEINFO_STARTMAP, /**< (string) The command for starting a new game. */ + GAMEINFO_TRAININGMAP, /**< (string) The command for starting the training. */ + GAMEINFO_MINVERSION, /**< (string) The minimum base game version. */ + GAMEINFO_CHATROOM, /**< (string) The chatroom for this game. E.g. #action */ + GAMEINFO_READMEFILE, /**< (string) File name of the readme documentation. */ + GAMEINFO_INTROVIDEO, /**< (string) File name of the intro video to play. */ + GAMEINFO_MENUMAP, /**< (string) Name of the map to be used as a background. */ + GAMEINFO_AUTHOR, /**< (string) Name of the author. */ + GAMEINFO_AUTHORSITE, /**< (string) The author their website. */ + GAMEINFO_PACKAGELIST, /**< (string) List of packages, separated by white-space. */ + GAMEINFO_INSTALLED, /**< (bool) Whether the game is installed. */ +} gameInfo_t; + /** Called when initializing the current game. Does not cache custom game/mod info. */ void GameLibrary_Init(void); /** Called when you want to initialize custom games/mods. Might want to call this later @@ -30,4 +55,52 @@ void GameLibrary_Deactivate(void); /** Returns true/false depending on if a Game installation is in progress. */ bool GameLibrary_IsInstalling(void); /** Returns a 0-100% value of game install progress, tracking across multiple packages. */ -float GameLibrary_InstallProgress(void); \ No newline at end of file +float GameLibrary_InstallProgress(void); + +/** Return the ID for the currently activate game. */ +int GameLibrary_GetCurrentGame(void); +/** Retrieves fields for a given game. See gameInfo_t for a list of fields you can query. */ +__variant GameLibrary_GetGameInfo(int, gameInfo_t); +__variant GameLibrary_GetInfo(gameInfo_t); + +typedef enum +{ + GAMEINFO_NONE, /**< No gameinfo available. This is probably the engine making assumptions. */ + GAMEINFO_MANIFEST, /**< Game info was read from a manifest within the path. */ + GAMEINFO_GITXT, /**< Game info stems from a Source Engine style gameinfo.txt file. */ + GAMEINFO_LIBLIST /**< Game info stems from a GoldSrc style liblist.gam file. */ +} gi_type; + +typedef struct +{ + string game; + string gamedir; + string base_dir; + string url_info; + string url_dl; + string version; + string readme; + int size; + int svonly; + int cldll; + string type; + string minversion; + string pkgname; + string pkgfile; + int pkgid; + int nomodels; + int nosprays; + int installed; + string mpentity; + string gamedll; + string startmap; + string trainingmap; + string fallback_dir; + string chatroom; + string menumap; + string introvideo; + gi_type info_type; +} gameinfo_t; + +int gameinfo_count; +gameinfo_t *games; \ No newline at end of file diff --git a/src/platform/gamelibrary.qc b/src/platform/gamelibrary.qc index 8025d1cc..fdcae9c3 100644 --- a/src/platform/gamelibrary.qc +++ b/src/platform/gamelibrary.qc @@ -17,6 +17,8 @@ int g_iModInstallCache; string g_strModInstallCache; +var int gameinfo_current = -1; + /* local game/mod info parsing */ static void GameLibrary_Set(int id) @@ -162,8 +164,8 @@ GameLibrary_LibListParse(int id, string strKey, string strValue) } break; case "minversion": - case "hlversion": - games[id].hlversion = strValue; + case "minversion": + games[id].minversion = strValue; break; case "nomodels": games[id].nomodels = (int)stof(strValue); @@ -203,9 +205,6 @@ GameLibrary_LibListParse(int id, string strKey, string strValue) case "introvideo": games[id].introvideo = strValue; break; - case "steambg": - games[id].steambg = (int)stof(strValue); - break; case "base_dir": games[id].base_dir = strValue; break; @@ -377,13 +376,12 @@ GameLibrary_SetDefaults(int id, string gamedirname) games[id].startmap = "map c0a0\n"; games[id].trainingmap = "map t0a0\n"; games[id].cldll = 1; - games[id].hlversion = "1000"; + games[id].minversion = "1000"; games[id].svonly = 0; games[id].installed = 1; games[id].chatroom = gamedirname; games[id].readme = "readme.txt"; games[id].pkgid = -1; - games[id].steambg = 0; #if 0 if (games[id].gamedir == "valve") { @@ -623,4 +621,89 @@ GameLibrary_Deactivate(void) localcmd("menu_restart\n"); localcmd("menu_customgame\n"); localcmd("menu_musicstart\n"); -} \ No newline at end of file +} + +/** Return the ID for the currently activate game. */ +int +GameLibrary_GetCurrentGame(void) +{ + return gameinfo_current; +} + +__variant +GameLibrary_GetInfo(gameInfo_t infoType) +{ + return GameLibrary_GetGameInfo(gameinfo_current, infoType); +} + +/** Retrieves info for a given game. */ +__variant +GameLibrary_GetGameInfo(int gameID, gameInfo_t infoType) +{ + switch (infoType) { + case GAMEINFO_TITLE: + return (string)games[gameID].game; + break; + case GAMEINFO_GAMEDIR: + return (string)games[gameID].gamedir; + break; + case GAMEINFO_FALLBACKDIR: + return (string)games[gameID].fallback_dir; + break; + case GAMEINFO_BASEDIR: + return (string)games[gameID].base_dir; + break; + case GAMEINFO_WEBSITE: + return (string)games[gameID].url_info; + break; + case GAMEINFO_VERSION: + return (string)games[gameID].version; + break; + case GAMEINFO_SIZE: + return (int)games[gameID].size; + break; + case GAMEINFO_TYPE: + return (string)games[gameID].type; + break; + case GAMEINFO_NOPLAYERMODELS: + return games[gameID].nomodels == 1 ? true : false; + break; + case GAMEINFO_NOSPRAYS: + return games[gameID].nosprays == 1 ? true : false; + break; + case GAMEINFO_STARTMAP: + return (string)games[gameID].startmap; + break; + case GAMEINFO_TRAININGMAP: + return (string)games[gameID].trainingmap; + break; + case GAMEINFO_MINVERSION: + return (string)games[gameID].minversion; + break; + case GAMEINFO_CHATROOM: + return (string)games[gameID].chatroom; + break; + case GAMEINFO_READMEFILE: + return (string)games[gameID].readme; + break; + case GAMEINFO_INTROVIDEO: + return (string)games[gameID].introvideo; + break; + case GAMEINFO_MENUMAP: + return (string)games[gameID].menumap; + break; + case GAMEINFO_AUTHOR: + return (string)"Unknown"; + break; + case GAMEINFO_AUTHORSITE: + return (string)"Unknown"; + break; + case GAMEINFO_PACKAGELIST: + return (string)games[gameID].pkgname; + break; + case GAMEINFO_INSTALLED: + return games[gameID].installed == 1 ? true : false; + default: + return __NULL__; + } +} diff --git a/src/platform/modserver.qc b/src/platform/modserver.qc index 59a2a6ca..ced7742c 100644 --- a/src/platform/modserver.qc +++ b/src/platform/modserver.qc @@ -51,7 +51,7 @@ ModServer_ParseList(string data) for (int x = 0; x < gameinfo_count; x++) { /* skip mods we already have. */ - if (gamedir == games[x].gamedir) { + if (gamedir == GameLibrary_GetGameInfo(x, GAMEINFO_GAMEDIR)) { skip = 1; break; } @@ -104,7 +104,7 @@ ModServer_ParseItem(string data) games[id].startmap = "c0a0"; games[id].trainingmap = "t0a0"; games[id].cldll = 1; - games[id].hlversion = "1110"; + games[id].minversion = "1110"; games[id].svonly = 0; games[id].installed = 0; games[id].pkgid = -1; @@ -141,8 +141,8 @@ ModServer_ParseItem(string data) case "gameinfo_type": games[id].type = argv(i+1); break; - case "gameinfo_hlversion": - games[id].hlversion = argv(i+1); + case "gameinfo_minversion": + games[id].minversion = argv(i+1); break; case "gameinfo_nomodels": games[id].nomodels = stof(argv(i+1)); @@ -202,7 +202,7 @@ ModServer_URI_Callback(float id, float code, string data, int resourcebytes) ModServer_ParseItem(data); break; case MODSERVER_REQ_PKGNAMES: - games[gameinfo_current].pkgname = data; + games[GameLibrary_GetCurrentGame()].pkgname = data; g_pkgname_updating = 0; break; default: diff --git a/src/platform/updates.qc b/src/platform/updates.qc index 524870f2..6e97746c 100644 --- a/src/platform/updates.qc +++ b/src/platform/updates.qc @@ -20,9 +20,10 @@ Updates_IsRecommended(string packageName) { string newName = ""; int countPkg = 0i; + string packageList = GameLibrary_GetInfo(GAMEINFO_PACKAGELIST); /* cancel out early if need be */ - if not (games[gameinfo_current].pkgname) + if not (packageList) return true; /* get rid of the version string FTEQW appends */ @@ -30,7 +31,7 @@ Updates_IsRecommended(string packageName) newName = argv(0); /* iterate over the recommended packages */ - countPkg = (int)tokenizebyseparator(games[gameinfo_current].pkgname, ";"); + countPkg = (int)tokenizebyseparator(packageList, ";"); for (int i = 0i; i < countPkg; i++) { /* there's a match */