From d461b33980827525128b0c245a36406c2745a10c Mon Sep 17 00:00:00 2001 From: terencehill Date: Wed, 9 Mar 2022 17:14:36 +0100 Subject: [PATCH] Allow exporting menu credits to data/data/credits.txt with the menu_credits_export alias --- qcsrc/menu/xonotic/credits.qc | 52 +++++++++++++++++++++++++++++------ xonotic-client.cfg | 3 ++ 2 files changed, 47 insertions(+), 8 deletions(-) diff --git a/qcsrc/menu/xonotic/credits.qc b/qcsrc/menu/xonotic/credits.qc index 7d096a90a..0c15803fe 100644 --- a/qcsrc/menu/xonotic/credits.qc +++ b/qcsrc/menu/xonotic/credits.qc @@ -406,23 +406,54 @@ PERSON(... and a goat) \ /**/ -int credits_get() + +int CREDITS_TYPE_TITLE = 2; +int CREDITS_TYPE_FUNCTION = 1; +int CREDITS_TYPE_PERSON = 0; +int CREDITS_TYPE_NL = -1; +void credits_add_line(int fh, int n, int type, string line) { - int n = buf_create(); - #define CREDITS_TITLE(t) bufstr_add(n, strcat("**", t), 0); - #define CREDITS_FUNCTION(f) bufstr_add(n, strcat("*", f), 0); - #define CREDITS_PERSON(p) bufstr_add(n, p, 0); + if (type == CREDITS_TYPE_TITLE) + line = strcat("**", line); + else if (type == CREDITS_TYPE_FUNCTION) + line = strcat("*", line); + + if (fh >= 0) + fputs(fh, strcat(line, "\n")); + if (n >= 0) + bufstr_add(n, line, 0); +} + +void credits_build(int fh, int n) +{ + #define CREDITS_TITLE(t) credits_add_line(fh, n, CREDITS_TYPE_TITLE, t); + #define CREDITS_FUNCTION(f) credits_add_line(fh, n, CREDITS_TYPE_FUNCTION, f); + #define CREDITS_PERSON(p) credits_add_line(fh, n, CREDITS_TYPE_PERSON, p); #define _CREDITS_PERSON(p) CREDITS_PERSON(#p) - #define CREDITS_NL() bufstr_add(n, "", 0); - CREDITS(CREDITS_TITLE, CREDITS_FUNCTION, _CREDITS_PERSON, CREDITS_PERSON, CREDITS_NL) + #define CREDITS_NL() credits_add_line(fh, n, CREDITS_TYPE_NL, ""); + CREDITS(CREDITS_TITLE, CREDITS_FUNCTION, _CREDITS_PERSON, CREDITS_PERSON, CREDITS_NL) #undef CREDITS_TITLE #undef CREDITS_FUNCTION #undef CREDITS_PERSON #undef _CREDITS_PERSON #undef CREDITS_NL +} + +int credits_get() +{ + int n = buf_create(); + credits_build(-1, n); return n; } +void credits_export() +{ + int fh = fopen("credits.txt", FILE_WRITE); + if(fh < 0) + return; + credits_build(fh, -1); +} + #undef CREDITS entity makeXonoticCreditsList() @@ -435,8 +466,13 @@ entity makeXonoticCreditsList() void XonoticCreditsList_configureXonoticCreditsList(entity me) { me.configureXonoticListBox(me); - me.bufferIndex = credits_get(); + me.bufferIndex = credits_get(); me.nItems = buf_getsize(me.bufferIndex); + if (cvar("_menu_credits_export")) // set by the menu_credits_export alias + { + credits_export(); + cvar_set("_menu_credits_export", "0"); + } } void XonoticCreditsList_destroy(entity me) { diff --git a/xonotic-client.cfg b/xonotic-client.cfg index c57770518..09602a543 100644 --- a/xonotic-client.cfg +++ b/xonotic-client.cfg @@ -487,6 +487,9 @@ set menu_showboxes 0 "show item bounding boxes (debug)" set menu_cvarlist_onlymodified 0 "show only modified cvars in the cvar list" set menu_force_on_disconnection 1 "force to show the menu this number of seconds after you get disconnected (0 to disable)" +set _menu_credits_export 0 "set to 1 and restart the menu to export credits to credits.txt (menu will automatically reset to 0)" +alias menu_credits_export "_menu_credits_export 1; menu_restart" + r_textbrightness 0.2 r_textcontrast 0.8 r_textshadow 0 -- 2.39.2