#include "credits.qh" // NOTE: try to keep this up-to-date with xonotic.org/team // XONRELEASE TODO: translator list is updated manually at release time // To update the list, look at both the common.po files, but also the transifex website, since they differ #define CREDITS(TITLE, FUNCTION, PERSON, NL) \ TITLE(_("Core Team")) \ PERSON("Ant \"Antibody\" Zucaro") \ PERSON("Antonio \"terencehill\" Piu") \ PERSON("bones_was_here") \ PERSON("Merlijn Hofstra") \ PERSON("Rudolf \"divVerent\" Polzer") \ PERSON("Ruszkai \"CuBe0wL\" Ákos") \ PERSON("Tyler \"-z-\" Mulligan") \ NL() \ TITLE(_("Extended Team")) \ PERSON("AsciiWolf") \ PERSON("Dr. Jaska") \ PERSON("Freddy") \ PERSON("Halogene") \ PERSON("Jan \"zykure\" Behrens") \ PERSON("k9er") \ PERSON("Morosophos") \ PERSON("MrBougo") \ PERSON("nilyt/nyov") \ PERSON("Nitroxis") \ PERSON("packer") \ PERSON("Severin \"sev\" Meyer") \ PERSON("Thomas \"illwieckz\" Debesse") \ PERSON("Victor \"LegendGuard\" Jaume") \ PERSON("Yannick \"SpiKe\" Le Guen") \ PERSON("z411") \ NL() \ NL() \ FUNCTION(_("Website")) \ PERSON("Ant \"Antibody\" Zucaro (web)") \ PERSON("Freddy") \ PERSON("Merlijn Hofstra") \ PERSON("Tyler \"-z-\" Mulligan (web / game)") \ NL() \ FUNCTION(_("Stats")) \ PERSON("Ant \"Antibody\" Zucaro") \ PERSON("Jan \"zykure\" Behrens") \ NL() \ FUNCTION(_("Art")) \ PERSON("KingPimpCommander") \ PERSON("Pearce \"theShadow\" Michal") \ PERSON("Peter \"Morphed\" Pielak") \ PERSON("Sahil \"DiaboliK\" Singhal") \ PERSON("Sam \"LJFHutch\" Hutchinson") \ PERSON("Severin \"sev\" Meyer") \ NL() \ FUNCTION(_("Animation")) \ PERSON("nifrek") \ PERSON("Sahil \"DiaboliK\" Singhal") \ NL() \ FUNCTION(_("Campaign")) \ PERSON("Dr. Jaska") \ PERSON("Marvin \"Mirio\" Beck") \ PERSON("Yannick \"SpiKe\" Le Guen") \ NL() \ FUNCTION(_("Level Design")) \ PERSON("Amadeusz \"amade/proraide\" Sławiński") \ PERSON("Ben \"MooKow\" Banker") \ PERSON("cityy") \ PERSON("Cortez") \ PERSON("Cuinn \"Cuinnton\" Herrick") \ PERSON("Debugger") \ PERSON("Hugo \"Calinou\" Locurcio") \ PERSON("Jakob \"tZork\" Markström Gröhn") \ PERSON("Konrad \"Justin\" Slawinski") \ PERSON("L0") \ PERSON("Łukasz \"kuniu the frogg\" Polek") \ PERSON("Maddin") \ PERSON("Maik \"SavageX\" Merten") \ PERSON("Marvin \"Mirio\" Beck") \ PERSON("MintOX") \ PERSON("packer") \ PERSON("Pearce \"theShadow\" Michal") \ PERSON("Rasmus \"FruitieX\" Eskola") \ PERSON("Ruszkai \"CuBe0wL\" Ákos") \ PERSON("Severin \"sev\" Meyer") \ PERSON("ShadoW") \ PERSON("t0uYK8Ne") \ PERSON("Yannick \"SpiKe\" Le Guen") \ NL() \ FUNCTION(_("Music / Sound FX")) \ PERSON("AquaNova (Archer)") \ PERSON("blkrbt") \ PERSON("chooksta") \ PERSON("Independent.nu") \ PERSON("Lea \"TheAudioMonkey\" Edwards") \ PERSON("[master]mind") \ PERSON("Merlijn Hofstra") \ PERSON("Mick Rippon") \ PERSON("Nick \"bitbomb\" Lucca") \ PERSON("remaxim") \ PERSON("Saulo \"mand1nga\" Gil") \ PERSON("{SC0RP} - Ian \"ID\" Dorrell") \ PERSON("Stephan") \ PERSON("unfa") \ NL() \ FUNCTION(_("Game Code")) \ PERSON("Antonio \"terencehill\" Piu") \ PERSON("bones_was_here") \ PERSON("Des") \ PERSON("Dr. Jaska") \ PERSON("Jakob \"tZork\" Markström Gröhn") \ PERSON("Juhu") \ PERSON("k9er") \ PERSON("martin-t") \ PERSON("Matthias \"matthiaskrgr\" Krüger") \ PERSON("Mattia \"Melanosuchus\" Basaglia") \ PERSON("Rasmus \"FruitieX\" Eskola") \ PERSON("Rudolf \"divVerent\" Polzer") \ PERSON("Samual \"Ares\" Lenks") \ PERSON("TimePath") \ PERSON("Victor \"LegendGuard\" Jaume") \ PERSON("z411") \ PERSON("Zac \"Mario\" Jardine") \ NL() \ FUNCTION(_("Marketing / PR")) \ PERSON("Ruszkai \"CuBe0wL\" Ákos") \ PERSON("Samual \"Ares\" Lenks") \ PERSON("Saulo \"mand1nga\" Gil") \ PERSON("Tyler \"-z-\" Mulligan") \ NL() \ FUNCTION(_("Legal")) \ PERSON("Merlijn Hofstra") \ PERSON("Rudolf \"divVerent\" Polzer") \ NL() \ NL() \ TITLE(_("Game Engine")) \ FUNCTION("DarkPlaces") \ PERSON("Ashley Rose \"LadyHavoc\" Hale") \ NL() \ FUNCTION(_("Engine Additions")) \ PERSON("bones_was_here") \ PERSON("David \"Cloudwalk\" Knapp") \ PERSON("Rudolf \"divVerent\" Polzer") \ PERSON("Samual \"Ares\" Lenks") \ NL() \ NL() \ TITLE(_("Compiler")) \ FUNCTION("GMQCC") \ PERSON("Dale \"graphitemaster\" Weiler") \ PERSON("Wolfgang \"Blub\\0\" Bumiller") \ NL() \ NL() \ NL() \ TITLE(_("Translators")) \ NL() \ FUNCTION(_("Asturian")) \ PERSON("enolp") \ PERSON("Llumex03") \ PERSON("Tornes \"Tornes.Llume\" Ḷḷume") \ PERSON("Ximielga") \ NL() \ FUNCTION(_("Belarusian")) \ PERSON("Mihail \"meequz\" Varantsou") \ PERSON("Pavel \"Pashok11\" Mordachev") \ NL() \ FUNCTION(_("Bulgarian")) \ PERSON("Alexander \"alex4o\" Bonin") \ PERSON("DelianST") \ PERSON("ifohancroft") \ PERSON("Krasimir \"kmikov\" Mikov") \ PERSON("lokster") \ PERSON("Nik \"cozmo\" Dim") \ PERSON("set_killer") \ PERSON("ubone") \ PERSON("С Станев") \ NL() \ FUNCTION(_("Chinese (China)")) \ PERSON("Antonidas") \ PERSON("Armcoon") \ PERSON("CodingJellyfish") \ PERSON("EricChen1") \ PERSON("kalawore") \ PERSON("Largee") \ PERSON("Liang \"dxkliu\" Liu") \ PERSON("Losier \"losierb\" Blackheath") \ PERSON("Matthew \"wjjmatthew\" Wu") \ PERSON("moetale") \ PERSON("NaitLee") \ PERSON("Richard \"seedship\" Nai") \ PERSON("sapphireliu") \ PERSON("yujiff") \ PERSON("韬 \"jiegushijia\" 刘") \ NL() \ FUNCTION(_("Chinese (Hong Kong)")) \ PERSON("Antonidas") \ PERSON("CodingJellyfish") \ PERSON("Largee") \ PERSON("kalawore") \ PERSON("Liang \"dxkliu\" Liu") \ PERSON("Losier \"losierb\" Blackheath") \ PERSON("Matthew \"wjjmatthew\" Wu") \ PERSON("moetale") \ PERSON("NaitLee") \ PERSON("sapphireliu") \ PERSON("韬 \"jiegushijia\" 刘") \ NL() \ FUNCTION(_("Chinese (Taiwan)")) \ PERSON("Alisha") \ PERSON("Antonidas") \ PERSON("Armcoon") \ PERSON("CodingJellyfish") \ PERSON("EricChen1") \ PERSON("Jeff \"s8321414\" Huang") \ PERSON("Largee") \ PERSON("Liang \"dxkliu\" Liu") \ PERSON("Losier \"losierb\" Blackheath") \ PERSON("kalawore") \ PERSON("Matthew \"wjjmatthew\" Wu") \ PERSON("msn1018927464") \ PERSON("NaitLee") \ PERSON("sapphireliu") \ PERSON("Simon \"XMLSDK\" Chow") \ PERSON("韬 \"jiegushijia\" 刘") \ PERSON("黃柏諺") \ NL() \ FUNCTION(_("Czech")) \ PERSON("Adam \"Admi335\" Říha") \ PERSON("Adam \"SakDrakken\" Krasa") \ PERSON("Aleš \"ramses1\" Svoboda") \ PERSON("fasdasd \"kitfildom\" sdasd") \ PERSON("gamingforyou875") \ PERSON("Jan \"kockahonza\" Kocka") \ PERSON("Jiří \"Havro\" Vrána") \ PERSON("martin-t") \ PERSON("Martin Krámský") \ PERSON("shogun assassin/woky") \ PERSON("Superovoce") \ PERSON("Tomáš \"CZHeron\" Volavka") \ PERSON("woky") \ NL() \ FUNCTION(_("Dutch")) \ PERSON("Alexander \"freefang\" van Dam") \ PERSON("Contijn \"Sojiro84\" Buijs") \ PERSON("Joeke \"Mappack\" de Graaf") \ PERSON("Jonathan \"Jonakeys\" van der Steege") \ PERSON("joostruis") \ PERSON("PinkRobot") \ PERSON("vegiburger") \ NL() \ FUNCTION(_("English (Australia)")) \ PERSON("Ben Dundon") \ PERSON("k9er") \ PERSON("Laurene \"sunflowers\" Albrand") \ PERSON("Matthew \"wjjmatthew\" Wu") \ PERSON("Stuart \"Cefiar\" Young") \ PERSON("Zac \"Mario\" Jardine") \ NL() \ FUNCTION(_("English (United Kingdom)")) \ PERSON("arduinoisgreat") \ PERSON("k9er") \ NL() \ FUNCTION(_("Finnish")) \ PERSON("Dr. Jaska") \ PERSON("Heidi Wenger") \ PERSON("Henry \"Exitium\" Sanmark") \ PERSON("irisxerno") \ PERSON("Jaakko Saarikko") \ PERSON("Jonas \"PowaTree\" Sahlberg") \ PERSON("LINUX SAUNA") \ PERSON("Oftox") \ PERSON("Oi Suomi On!") \ PERSON("Rasmus \"FruitieX\" Eskola") \ PERSON("ZakkeX") \ NL() \ FUNCTION(_("French")) \ PERSON("_biloute") \ PERSON("Aodren \"Gwlanbzh\" Le Gloanec") \ PERSON("adrien \"VRad\" vigneron") \ PERSON("Adgenodux") \ PERSON("Gwlanbzh") \ PERSON("HelloWorld42404") \ PERSON("Hugo \"Calinou\" Locurcio") \ PERSON("Iso \"coughingmouse\" Lee") \ PERSON("Maxime \"Taximus\" Paradis") \ PERSON("Marvin \"Mirio\" Beck") \ PERSON("Nicolas \"signed\" Formichella") \ PERSON("RedGuff") \ PERSON("Thomas \"illwieckz\" Debesse") \ PERSON("Yannick \"SpiKe\" Le Guen") \ NL() \ FUNCTION(_("Galician")) \ PERSON("Nin \"ninjum\" Him") \ PERSON("Victor \"LegendGuard\" Jaume") \ NL() \ FUNCTION(_("German")) \ PERSON("Alex \"tiprogrammierer.alex\" Progger") \ PERSON("BL4NKY") \ PERSON("cvcxc") \ PERSON("diacriticalhit") \ PERSON("Erik \"Ablu\" Schilling") \ PERSON("Iwan \"qubodup\" Gabovitch") \ PERSON("Jope \"Sless\" Withers") \ PERSON("Larson \"skps\" März") \ PERSON("Logan \"norsvenska\" Zerfass") \ PERSON("Markus \"Skoppes\" Erhard") \ PERSON("Paul \"Snapper\"") \ PERSON("Robert \"HbmMods\" Katzinsky") \ PERSON("Rudolf \"divVerent\" Polzer") \ PERSON("TheTrueBrot") \ PERSON("Wuzzy") \ PERSON("Yepoleb") \ NL() \ FUNCTION(_("Greek")) \ PERSON("Αντώνιος \"antonis97apple\" Τσίγκας") \ PERSON("Γιώργος Καρδάμης") \ PERSON("Hector \"The_Smasher_1992\" Champipis") \ PERSON("Konstantinos \"LDinos\" Mihalenas") \ PERSON("MasterWord") \ PERSON("Marinus \"Savvoritias\" Savoritias") \ PERSON("Mensious") \ PERSON("Pandelis \"pandem6nium\" Biltiroglou") \ PERSON("Vindex") \ PERSON("Yannis \"Evropi\" Anthymidis") \ NL() \ FUNCTION(_("Hungarian")) \ PERSON("Ács \"acszoltan111\" Zoltán") \ PERSON("Ákos Ruszkai") \ PERSON("Barnabás \"lordgalimow\" Klemens") \ PERSON("MmAaXx500") \ PERSON("Peter \"fpeterhu\" Ferenczy") \ PERSON("Ruszkai \"CuBe0wL\" Ákos") \ PERSON("Titusz \"diduuz\" Érsek") \ PERSON("Rob \"xaN1C4n3\"") \ PERSON("Zsolt \"Yellowberry\" Zitting") \ NL() \ FUNCTION(_("Indonesian")) \ PERSON("Angeline Meilia") \ PERSON("Ariesandy Hidayat") \ PERSON("red koala") \ NL() \ FUNCTION(_("Irish")) \ PERSON("Kevin \"kscanne\" Scannell") \ NL() \ FUNCTION(_("Italian")) \ PERSON("amedeo463") \ PERSON("Antonio \"terencehill\" Piu") \ PERSON("Costa") \ PERSON("Felice \"MaidenBeast\" Sallustio") \ PERSON("Giovanni \"rizzogianni73\" Rizzello") \ PERSON("Jessica Amoruso") \ PERSON("stdi") \ PERSON("XCostaX") \ NL() \ FUNCTION(_("Japanese")) \ PERSON("Antoni Das") \ PERSON("Lento") \ PERSON("Space Ace") \ PERSON("Ryu \"ryusho2523\" N.") \ PERSON("Victor \"LegendGuard\" Jaume") \ PERSON("z411") \ PERSON("堀川 \"bapuru524\" 健康") \ NL() \ FUNCTION(_("Kazakh")) \ PERSON("Артем \"bystrov.arterm\" Быстров") \ NL() \ FUNCTION(_("Korean")) \ PERSON("BYEONGJIN \"ahnkoon\" AN") \ PERSON("Jisoo \"LimJiSoo0719\" Lim") \ PERSON("Iso \"coughingmouse\" Lee") \ PERSON("Seokho Son") \ NL() \ FUNCTION(_("Latin")) \ PERSON("oblector o") \ NL() \ FUNCTION(_("Polish")) \ PERSON("4m") \ PERSON("Alex \"tiprogrammierer.alex\" Progger") \ PERSON("Amadeusz \"amade/proraide\" Sławiński") \ PERSON("Artur \"artur9010\" Motyka") \ PERSON("Cris \"Kshyso\" Sus") \ PERSON("David Agzo") \ PERSON("Eryk \"ewm\" Michalak") \ PERSON("Jakub \"_Mpcs\" Niklas") \ PERSON("Jakub \"KubeQ11\" Pędziszewski") \ PERSON("John \"Myran\" Smith") \ PERSON("Kacper \"kacperski1\" Herchel") \ PERSON("Karol \"kRkk\" Kosek") \ PERSON("Kriss \"Kriss7475\" Chr") \ PERSON("Lukasz Sekalski") \ PERSON("Marcin \"mpnogaj\" Nogaj") \ PERSON("Oliwier Jaszczyszyn") \ PERSON("Paweł \"siwyi\" Goca") \ PERSON("Piotr \"vipkoza\" Kozica") \ PERSON("qqiLMFjv1iBfT3p6TNxjUThsaTVIXhQc") \ PERSON("Rafał \"Okava\" Szymański") \ PERSON("Robert \"Szkodnix\" Wolniak") \ PERSON("Saikuru \"saikuru0\" Zero") \ PERSON("Sertomas") \ PERSON("SFS Atlas") \ PERSON("tasopis") \ PERSON("theQuos") \ PERSON("Wojciech \"g_host\" Sikora") \ NL() \ FUNCTION(_("Portuguese")) \ PERSON("Ivan Paulos \"greylica\" Tomé") \ PERSON("Jean Trindade \"Muleke_Trairao\" Pereira") \ PERSON("lecalam") \ PERSON("NotThatPrivate") \ PERSON("Pedrada19") \ PERSON("Ricardo Manuel \"hellgardia\" da Cruz Coelho da Silva") \ PERSON("Rui \"xendez\"") \ PERSON("xXxCHAOTICxXx") \ NL() \ FUNCTION(_("Portuguese (Brazil)")) \ PERSON("Arno \"Bleyom\" Heinrich") \ PERSON("Ivan Paulos \"greylica\" Tomé") \ PERSON("Jean Trindade \"Muleke_Trairao\" Pereira") \ PERSON("NotThatPrivate") \ PERSON("Ricardo Manuel \"hellgardia\" da Cruz Coelho da Silva") \ PERSON("Rui \"xendez\"") \ PERSON("yy0zz") \ PERSON("zerowhy") \ NL() \ FUNCTION(_("Romanian")) \ PERSON("Adrian-Ciprian \"adrian.tinjala\" Tînjală") \ PERSON("busterdbk") \ PERSON("Cuzenco \"andonis1616\" Andrei Robert") \ PERSON("Daniel \"dasj\" Șerbănescu") \ PERSON("Edward205") \ PERSON("Iulian \"ElektroBoom\" Oancea") \ PERSON("Mircea \"Taoki\" Kitsune") \ PERSON("Sorin \"unic_sorin\" Botirla") \ PERSON("Tudor \"TropiKo\" Ionel") \ NL() \ FUNCTION(_("Russian")) \ PERSON("Alex \"alextalker7\" Talker") \ PERSON("Alexandr \"zrg\"") \ PERSON("Alexei \"PlasmaSheep\" B.") \ PERSON("Andrei \"adem4ik\" Stepanov") \ PERSON("Andrey \"dekrY\" P.") \ PERSON("Artem \"skybon\" Vorotnikov") \ PERSON("Александр ABATAPA") \ PERSON("Артём \"Temak\" Котлубай") \ PERSON("Blueberryy") \ PERSON("Dmitro \"Gamebot\" Sokhin") \ PERSON("gravicappa") \ PERSON("HelloWorld42404") \ PERSON("Hot Dog") \ PERSON("jusio") \ PERSON("Lord Canistra") \ PERSON("Mikita \"rudzik8\" Wiśniewski") \ PERSON("Morosophos") \ PERSON("Nikoli") \ PERSON("Pavel \"Pashok11\" Mordachev") \ PERSON("Plato \"SemperPeritus\" Efimov") \ PERSON("Sergej \"Clearness High\" Lutsyk") \ PERSON("Simple88") \ PERSON("Темак") \ PERSON("Пидарасенька") \ NL() \ FUNCTION(_("Serbian")) \ PERSON("Саша \"salepetronije\" Петровић") \ PERSON("Marko M. Kostić") \ PERSON("Nikola \"asd222\" Dundjerski") \ PERSON("Pendulla") \ PERSON("Rafael \"Ristovski\"") \ NL() \ FUNCTION(_("Spanish")) \ PERSON("0000simon") \ PERSON("Alan \"aagp\" Garcia") \ PERSON("Antonio \"Antoniosirc\" Sirera") \ PERSON("Ari_tent") \ PERSON("Belén \"BelenVM\" Velasco") \ PERSON("brunodeleo") \ PERSON("Damian \"starfire24680\" Kurek") \ PERSON("Excruciatus \"crucesignatus\" X") \ PERSON("Juan \"Perju\" Perez") \ PERSON("Kammy") \ PERSON("Lorenzo \"lololailo\" Soriano") \ PERSON("Luciano \"NeonKnightOA\" Balducchi") \ PERSON("roader_gentoo") \ PERSON("Rodrigo Mouton Laudin") \ PERSON("Roi Asher Gerszkoviez") \ PERSON("SouL") \ PERSON("Starfire24680") \ PERSON("Victor \"LegendGuard\" Jaume") \ PERSON("Vitama Piru Leta") \ PERSON("Yllelder") \ PERSON("Yotta Mxt") \ PERSON("z411") \ NL() \ FUNCTION(_("Swedish")) \ PERSON("Gustaf \"Hanicef\" Alhäll") \ PERSON("Karl-Oskar \"machine\" Rikås") \ PERSON("Logan \"norsvenska\" Zerfass") \ PERSON("marcus256") \ PERSON("Hampus \"xunz\" Kreitz") \ NL() \ FUNCTION(_("Turkish")) \ PERSON("Abdurrahman \"akkus12345\" AKKUŞ") \ PERSON("aggbhh20") \ PERSON("Ahmet \"ahmetlii\"") \ PERSON("Çağlar \"caglarturali\" Turalı") \ PERSON("Bekir \"bkrucarci\"") \ PERSON("Demiray \"tulliana\" Muhterem") \ PERSON("Efeospt \"Efeisot\" KMR") \ PERSON("Gokdeniz.Kucukali") \ PERSON("ibra kap") \ PERSON("Lucifer \"Lucifer25x\" Morningstar") \ PERSON("Mehmet Ali \"bluedream1381\" Kaplan") \ PERSON("Tan Siret \"yutyocraft\" Akıncı") \ PERSON("xe1st") \ NL() \ FUNCTION(_("Ukrainian")) \ PERSON("BakerDoge") \ PERSON("Dmitro \"Gamebot\" Sokhin") \ PERSON("Ihor \"iRomanyshyn\" Romanyshyn") \ PERSON("Ihor \"uandreew\" Andreev") \ PERSON("Illia \"imbirWIthSugar\" Serediuk") \ PERSON("Oleh \"BlaXpirit\" Prypin") \ PERSON("Vasyl \"CHUVACK\" Kushniruk") \ PERSON("Vasyl \"Harmata\" Melnyk") \ PERSON("Yuriy \"herrniemand\" Ackermann") \ NL() \ NL() \ TITLE(_("Past Contributors")) \ PERSON("Akari") \ PERSON("Alexander \"motorsep\" Zubov") \ PERSON("Alexander \"naryl\" Suhoverhov") \ PERSON("Amos \"torus\" Dudley") \ PERSON("Andreas \"Black\" Kirsch") \ PERSON("Attila \"WW3\" Houtkooper") \ PERSON("BigMac") \ PERSON("Braden \"meoblast001\" Walters") \ PERSON("Brain Younds") \ PERSON("BuddyFriendGuy") \ PERSON("Chris \"amethyst7\" Matz") \ PERSON("Christian Ice") \ PERSON("Clinton \"Kaziganthe\" Freeman") \ PERSON("Dan \"Digger\" Korostelev") \ PERSON("Dan \"Wazat\" Hale") \ PERSON("Diomedes") \ PERSON("Dokujisan") \ PERSON("Donkey") \ PERSON("dstrek") \ PERSON("Dustin Geeraert") \ PERSON("Edgenetwork") \ PERSON("Edward \"Ed\" Holness") \ PERSON("Eric \"Munyul Verminard\" Sambach") \ PERSON("Erik \"Ablu\" Schilling") \ PERSON("Fabien \"H. Reaper\" Tschirhart") \ PERSON("Florian Paul \"lda17h\" Schmidt") \ PERSON("FrikaC") \ PERSON("Garth \"Zombie\" Hendy") \ PERSON("GATTS") \ PERSON("Gerd \"Elysis\" Raudenbusch") \ PERSON("Gottfried \"Toddd\" Hofmann") \ PERSON("Henning \"Tymo\" Janssen") \ PERSON("Innovati") \ PERSON("Jeff") \ PERSON("JH0nny") \ PERSON("Jitspoe") \ PERSON("Jody Gallagher") \ PERSON("Jope \"Sless\" Withers") \ PERSON("Jubilant") \ PERSON("Juergen \"LowDragon\" Timm") \ PERSON("KadaverJack") \ PERSON("Kevin \"Tyrann\" Shanahan") \ PERSON("Kristian \"morfar\" Johansson") \ PERSON("Kurt Dereli") \ PERSON("lcatlnx") \ PERSON("Lee David Ash") \ PERSON("Lee Vermeulen") \ PERSON("leileilol") \ PERSON("Lyberta") \ PERSON("magorian") \ PERSON("Marius \"GreEn`mArine\" Shekow") \ PERSON("Marko \"Urre\" Permanto") \ PERSON("Marvin \"Mirio\" Beck") \ PERSON("Mathieu \"Elric\" Olivier") \ PERSON("Mattrew \"Tronyn\" Rye") \ PERSON("MauveBib") \ PERSON("Mephisto") \ PERSON("Mepper") \ PERSON("michaelb") \ PERSON("Michael \"Tenshihan\" Quinn") \ PERSON("Mircea \"Taoki\" Kitsune") \ PERSON("Munyul") \ PERSON("Netzwerg") \ PERSON("NoelCower") \ PERSON("Oleh \"BlaXpirit\" Prypin") \ PERSON("Parapraxis") \ PERSON("parasti") \ PERSON("Paul Scott") \ PERSON("Paul \"Strahlemann\" Evers") \ PERSON("Penguinum") \ PERSON("Petithomme") \ PERSON("PlasmaSheep") \ PERSON("Przemysław \"atheros\" Grzywacz") \ PERSON("Q1 Retexturing Project") \ PERSON("Qantourisc") \ PERSON("Rick \"Rat\" Kelley") \ PERSON("Robert \"ai\" Kuroto") \ PERSON("Ronan") \ PERSON("Sajt") \ PERSON("Samual \"Ares\" Lenks") \ PERSON("Saulo \"mand1nga\" Gil") \ PERSON("Shaggy") \ PERSON("Shank") \ PERSON("s1lence") \ PERSON("Simon O’Callaghan") \ PERSON("slava") \ PERSON("Soelen") \ PERSON("SomeGuy") \ PERSON("SoulKeeper_p") \ PERSON("Spike") \ PERSON("Spirit") \ PERSON("Stephan \"esteel\" Stahl") \ PERSON("Steve Vermeulen") \ PERSON("Supajoe") \ PERSON("Sydes") \ PERSON("Tei") \ PERSON("The player with the unnecessarily long name") \ PERSON("Tomaz") \ PERSON("Ulrich Galbraith") \ PERSON("Vortex") \ PERSON("William Libert") \ PERSON("William \"Willis\" Weilep") \ PERSON("Yves \"EviLair\" Allaire") \ PERSON("Zac \"Mario\" Jardine") \ PERSON("Zenex") \ PERSON("... and a goat") \ /**/ 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) { 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_NL() credits_add_line(fh, n, CREDITS_TYPE_NL, ""); CREDITS(CREDITS_TITLE, CREDITS_FUNCTION, CREDITS_PERSON, CREDITS_NL) #undef CREDITS_TITLE #undef CREDITS_FUNCTION #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() { entity me = NEW(XonoticCreditsList); me.configureXonoticCreditsList(me); return me; } void XonoticCreditsList_configureXonoticCreditsList(entity me) { me.configureXonoticListBox(me); 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) { buf_del(me.bufferIndex); } void XonoticCreditsList_draw(entity me) { if(me.scrolling) { me.scrollPos = bound(0, (time - me.scrolling) * me.itemHeight, me.nItems * me.itemHeight - 1); me.scrollPosTarget = me.scrollPos; } SUPER(XonoticCreditsList).draw(me); } void XonoticCreditsList_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize) { SUPER(XonoticCreditsList).resizeNotify(me, relOrigin, relSize, absOrigin, absSize); me.realFontSize_y = me.fontSize / (absSize.y * me.itemHeight); me.realFontSize_x = me.fontSize / (absSize.x * (1 - me.controlWidth)); me.realUpperMargin = 0.5 * (1 - me.realFontSize.y); } void XonoticCreditsList_drawListBoxItem(entity me, int i, vector absSize, bool isSelected, bool isFocused) { string s; float theAlpha; vector theColor; s = bufstr_get(me.bufferIndex, i); if(substring(s, 0, 2) == "**") { s = substring(s, 2, strlen(s) - 2); theColor = SKINCOLOR_CREDITS_TITLE; theAlpha = SKINALPHA_CREDITS_TITLE; } else if(substring(s, 0, 1) == "*") { s = substring(s, 1, strlen(s) - 1); theColor = SKINCOLOR_CREDITS_FUNCTION; theAlpha = SKINALPHA_CREDITS_FUNCTION; } else { theColor = SKINCOLOR_CREDITS_PERSON; theAlpha = SKINALPHA_CREDITS_PERSON; } draw_CenterText(me.realUpperMargin * eY + 0.5 * eX, s, me.realFontSize, theColor, theAlpha, 0); } float XonoticCreditsList_keyDown(entity me, float key, float ascii, float shift) { me.scrolling = 0; return SUPER(XonoticCreditsList).keyDown(me, key, ascii, shift); }