3 #define CREDITS(TITLE, FUNCTION, PERSON, PERSON_, NL) \
4 TITLE(_("Core Team")) \
5 PERSON(Rudolf "divVerent" Polzer) \
6 PERSON(Ant "Antibody" Zucaro) \
7 PERSON(Antonio "terencehill" Piu) \
8 PERSON(Marvin "Mirio" Beck) \
9 PERSON(Merlijn Hofstra) \
10 PERSON(Ruszkai "CuBe0wL" Ákos) \
11 PERSON(Tyler "-z-" Mulligan) \
13 TITLE(_("Extended Team")) \
14 PERSON(bones_was_here) \
15 PERSON(David "Cloudwalk" Knapp) \
18 PERSON(Jan "zykure" Behrens) \
24 PERSON(Severin "sev" Meyer) \
25 PERSON(Thomas "illwieckz" Debesse) \
26 PERSON(Victor "LegendGuard" Jaume) \
27 PERSON(Yannick "SpiKe" Le Guen) \
31 FUNCTION(_("Website")) \
32 PERSON(Ant "Antibody" Zucaro (web)) \
34 PERSON(Merlijn Hofstra) \
35 PERSON(Tyler "-z-" Mulligan (web / game)) \
37 FUNCTION(_("Stats")) \
38 PERSON(Ant "Antibody" Zucaro) \
39 PERSON(Jan "zykure" Behrens) \
42 PERSON(Severin "sev" Meyer) \
43 PERSON(Sahil "DiaboliK" Singhal) \
44 PERSON(Peter "Morphed" Pielak) \
45 PERSON(Sam "LJFHutch" Hutchinson) \
46 PERSON(Pearce "theShadow" Michal) \
47 PERSON(KingPimpCommander) \
49 FUNCTION(_("Animation")) \
50 PERSON(Sahil "DiaboliK" Singhal) \
53 FUNCTION(_("Campaign")) \
54 PERSON(Marvin "Mirio" Beck) \
56 FUNCTION(_("Level Design")) \
57 PERSON(Amadeusz "amade/proraide" Sławiński) \
58 PERSON(Ben "MooKow" Banker) \
61 PERSON(Cuinn "Cuinnton" Herrick) \
63 PERSON(Hugo "Calinou" Locurcio) \
64 PERSON(Jakob "tZork" Markström Gröhn) \
65 PERSON(Konrad "Justin" Slawinski) \
68 PERSON(Łukasz "kuniu the frogg" Polek) \
69 PERSON(Maik "SavageX" Merten) \
70 PERSON(Marvin "Mirio" Beck) \
73 PERSON(Pearce "theShadow" Michal) \
74 PERSON(Rasmus "FruitieX" Eskola) \
75 PERSON(Ruszkai "CuBe0wL" Ákos) \
76 PERSON(Severin "sev" Meyer) \
79 PERSON(Yannick "SpiKe" Le Guen) \
81 FUNCTION(_("Music / Sound FX")) \
82 PERSON(AquaNova (Archer)) \
85 PERSON(Independent.nu) \
86 PERSON(Lea "TheAudioMonkey" Edwards) \
87 PERSON([master]mind) \
88 PERSON(Merlijn Hofstra) \
90 PERSON(Nick "bitbomb" Lucca) \
92 PERSON(Saulo "mand1nga" Gil) \
93 PERSON({SC0RP} - Ian "ID" Dorrell) \
97 FUNCTION(_("Game Code")) \
98 PERSON(Antonio "terencehill" Piu) \
99 PERSON(bones_was_here) \
101 PERSON(Jakob "tZork" Markström Gröhn) \
103 PERSON(Mattia "Melanosuchus" Basaglia) \
104 PERSON(Matthias "matthiaskrgr" Krüger) \
105 PERSON(Rasmus "FruitieX" Eskola) \
106 PERSON(Rudolf "divVerent" Polzer) \
107 PERSON(Samual "Ares" Lenks) \
109 PERSON(Victor "LegendGuard" Jaume) \
111 PERSON(Zac "Mario" Jardine) \
113 FUNCTION(_("Marketing / PR")) \
114 PERSON(Tyler "-z-" Mulligan) \
115 PERSON(Ruszkai "CuBe0wL" Ákos) \
116 PERSON(Samual "Ares" Lenks) \
117 PERSON(Saulo "mand1nga" Gil) \
119 FUNCTION(_("Legal")) \
120 PERSON(Rudolf "divVerent" Polzer) \
121 PERSON(Merlijn Hofstra) \
124 TITLE(_("Game Engine")) \
125 FUNCTION("DarkPlaces") \
126 PERSON(Ashley Rose "LadyHavoc" Hale) \
128 FUNCTION(_("Engine Additions")) \
129 PERSON(David "Cloudwalk" Knapp) \
130 PERSON(Rudolf "divVerent" Polzer) \
131 PERSON(Samual "Ares" Lenks) \
134 TITLE(_("Compiler")) \
136 PERSON(Wolfgang "Blub\0" Bumiller) \
137 PERSON(Dale "graphitemaster" Weiler) \
140 TITLE(_("Other Active Contributors")) \
142 PERSON(Mircea "Taoki" Kitsune) \
147 TITLE(_("Translators")) \
149 FUNCTION(_("Asturian")) \
151 PERSON(Tornes "Tornes.Llume" Ḷḷume) \
154 FUNCTION(_("Belarusian")) \
155 PERSON(Mihail "meequz" Varantsou) \
157 FUNCTION(_("Bulgarian")) \
158 PERSON(Alexander "alex4o" Bonin) \
159 PERSON(ifohancroft) \
160 PERSON(Krasimir "kmikov" Mikov) \
162 PERSON(Nik "cozmo" Dim) \
166 FUNCTION(_("Chinese (China)")) \
169 PERSON(CodingJellyfish) \
170 PERSON(gee "Largee" Lar) \
171 PERSON(jiegushijia) \
173 PERSON(Liang "dxkliu" Liu) \
174 PERSON(Losier "losierb" Blackheath) \
175 PERSON(Matthew "wjjmatthew" Wu) \
178 PERSON(sapphireliu) \
180 FUNCTION(_("Chinese (Hong Kong)")) \
182 PERSON(CodingJellyfish) \
183 PERSON(gee "Largee" Lar) \
184 PERSON(jiegushijia) \
186 PERSON(Losier "losierb" Blackheath) \
187 PERSON(Matthew "wjjmatthew" Wu) \
188 PERSON(Liang "dxkliu" Liu) \
191 PERSON(sapphireliu) \
193 FUNCTION(_("Chinese (Taiwan)")) \
196 PERSON(Jeff "s8321414" Huang) \
197 PERSON(msn1018927464) \
200 FUNCTION(_("Czech")) \
201 PERSON(Adam "Admi335" Říha) \
202 PERSON(fasdasd " kitfildom" sdasd) \
203 PERSON(gamingforyou875) \
204 PERSON(Jan "kockahonza" Kocka) \
205 PERSON(Jiří "Havro" Vrána) \
206 PERSON(shogun assassin/woky) \
208 PERSON(Tomáš "CZHeron" Volavka) \
210 FUNCTION(_("Dutch")) \
211 PERSON(Alexander "freefang" van Dam) \
212 PERSON(Contijn "Sojiro84" Buijs) \
213 PERSON(Joeke "Mappack" de Graaf) \
214 PERSON(Jonathan "Jonakeys" van der Steege) \
218 FUNCTION(_("English (Australia)")) \
219 PERSON(Matthew "matthewwu2003" Wu) \
220 PERSON(Laurene "sunflowers" Albrand) \
221 PERSON(Stuart "Cefiar" Young) \
222 PERSON(Zac "Mario" Jardine) \
224 FUNCTION(_("Finnish")) \
226 PERSON(Heidi Wenger) \
227 PERSON(Henry "Exitium" Sanmark) \
228 PERSON(Jaakko Saarikko) \
229 PERSON(Jonas "PowaTree" Sahlberg) \
230 PERSON(LINUX SAUNA) \
232 PERSON(Oi Suomi On!) \
233 PERSON(Rasmus "FruitieX" Eskola) \
235 FUNCTION(_("French")) \
237 PERSON(Hugo "Calinou" Locurcio) \
238 PERSON(Kim "coughingmouse" Lee) \
239 PERSON(Maxime "Taximus" Paradis) \
240 PERSON(Nicolas "signed" Formichella) \
242 PERSON(Thomas "illwieckz" Debesse) \
243 PERSON(Yannick "SpiKe" Le Guen) \
245 FUNCTION(_("German")) \
247 PERSON(Erik "Ablu" Schilling) \
248 PERSON(Jope "Sless" Withers) \
249 PERSON(Larson "skps" März) \
250 PERSON(Marvin "Mirio" Beck) \
251 PERSON(Paul "Snapper") \
252 PERSON(Robert "HbmMods" Katzinsky) \
253 PERSON(Rudolf "divVerent" Polzer) \
254 PERSON(TheTrueBrot) \
258 FUNCTION(_("Greek")) \
259 PERSON_("Γιώργος Καρδάμης") \
260 PERSON(Hector "The_Smasher_1992" Champipis) \
261 PERSON(Konstantinos "LDinos" Mihalenas) \
263 PERSON(Mensious Mensious) \
266 PERSON(Yannis "Evropi" Anthymidis) \
268 FUNCTION(_("Hungarian")) \
269 PERSON(Ács "acszoltan111" Zoltán) \
271 PERSON(Peter "fpeterhu" Ferenczy) \
272 PERSON(Ruszkai "CuBe0wL" Ákos) \
275 FUNCTION(_("Indonesian")) \
276 PERSON(Angeline Meilia) \
277 PERSON(Ariesandy Hidayat) \
280 FUNCTION(_("Irish")) \
281 PERSON(Kevin "kscanne" Scannell) \
283 FUNCTION(_("Italian")) \
284 PERSON(Antonio "terencehill" Piu) \
285 PERSON(Felice "MaidenBeast" Sallustio) \
286 PERSON(Jessica Amoruso) \
290 FUNCTION(_("Japanese")) \
294 PERSON(RYU "ryusho2523" N.) \
295 PERSON(Victor "LegendGuard" Jaume) \
298 FUNCTION(_("Kazakh")) \
299 PERSON(Артем "bystrov.arterm" Быстров) \
301 FUNCTION(_("Korean")) \
302 PERSON(BYEONGJIN "ahnkoon" AN) \
303 PERSON(Jisoo "LimJiSoo0719" Lim) \
304 PERSON(Kim "coughingmouse" Lee) \
307 FUNCTION(_("Latin")) \
310 FUNCTION(_("Polish")) \
312 PERSON(Alex "tiprogrammierer.alex" Progger) \
313 PERSON(Amadeusz "amade/proraide" Sławiński) \
314 PERSON(Artur "artur9010" Motyka) \
315 PERSON(Cris "Kshyso" Sus) \
316 PERSON(Jakub "_Mpcs" Niklas) \
317 PERSON(Jakub "KubeQ11" Pędziszewski) \
318 PERSON(John "Myran" Smith) \
319 PERSON(Karol "kRkk" Kosek) \
320 PERSON(Kriss "Kriss7475" Chr) \
321 PERSON(Piotr "vipkoza" Kozica) \
322 PERSON(qqiLMFjv1iBfT3p6TNxjUThsaTVIXhQc) \
323 PERSON(Rafał "Okava" Szymański) \
324 PERSON(Robert "Szkodnix" Wolniak) \
325 PERSON(Saikuru "saikuru0" Zero) \
328 PERSON(Wojciech "g_host" Sikora) \
330 FUNCTION(_("Portuguese")) \
331 PERSON(Ivan Paulos "greylica" Tomé) \
332 PERSON(Jean Trindade "Muleke_Trairao" Pereira) \
334 PERSON(NotThatPrivate) \
335 PERSON(Ricardo Manuel "hellgardia" da Cruz Coelho da Silva) \
336 PERSON(Rui "xendez") \
337 PERSON(xXxCHAOTICxXx) \
339 FUNCTION(_("Portuguese (Brazil)")) \
340 PERSON(Jean Trindade "Muleke_Trairao" Pereira) \
341 PERSON(Rui "xendez") \
345 FUNCTION(_("Romanian")) \
346 PERSON(Adrian-Ciprian "adrian.tinjala" Tînjală) \
348 PERSON(Cuzenco "andonis1616" Andrei Robert) \
349 PERSON(Iulian "ElektroBoom" Oancea) \
350 PERSON(Mircea "Taoki" Kitsune) \
351 PERSON(Sorin "unic_sorin" Botirla) \
352 PERSON(Tudor "TropiKo" Ionel) \
354 FUNCTION(_("Russian")) \
355 PERSON(Alex "alextalker7" Talker) \
356 PERSON(Alexandr "zrg") \
357 PERSON(Andrei "adem4ik" Stepanov) \
358 PERSON(Andrey "dekrY" P.) \
359 PERSON(Артём "Temak" Котлубай) \
360 PERSON(Artem Vorotnikov) \
364 PERSON(Lord Canistra) \
367 PERSON(Sergej "Clearness High" Lutsyk) \
370 FUNCTION(_("Serbian")) \
371 PERSON_("Саша \"salepetronije\" Петровић") \
372 PERSON(Marko M. Kostić) \
374 PERSON(Rafael "Ristovski") \
376 FUNCTION(_("Spanish")) \
377 PERSON_("0000simon") \
378 PERSON(Alan "aagp" Garcia) \
379 PERSON(Antonio "Antoniosirc" Sirera) \
382 PERSON(Damian "starfire24680" Kurek) \
383 PERSON(Excruciatus "crucesignatus" X) \
385 PERSON(roader_gentoo) \
386 PERSON(Rodrigo Mouton Laudin) \
388 PERSON(Starfire24680) \
389 PERSON(Victor "LegendGuard" Jaume) \
390 PERSON(Vitama Piru Leta) \
394 FUNCTION(_("Swedish")) \
395 PERSON(Gustaf "Hanicef" Alhäll) \
396 PERSON(Karl-Oskar "machine" Rikås) \
399 FUNCTION(_("Turkish")) \
400 PERSON(Abdurrahman "akkus12345" AKKUŞ) \
401 PERSON(Ahmet "ahmetlii") \
402 PERSON(Çağlar "caglarturali" Turalı) \
403 PERSON(Demiray "tulliana" Muhterem) \
404 PERSON(Gokdeniz.Kucukali) \
406 PERSON(Lucifer "Lucifer25x" Morningstar) \
409 FUNCTION(_("Ukrainian")) \
410 PERSON(Dmitro "Gamebot" Sokhin) \
411 PERSON(Ihor "uandreew" Andreev) \
412 PERSON(Illia "imbirWIthSugar" Serediuk) \
413 PERSON(Oleh "BlaXpirit" Prypin) \
414 PERSON(Vasyl "Harmata" Melnyk) \
415 PERSON(Yuriy "herrniemand" Ackermann) \
418 TITLE(_("Past Contributors")) \
420 PERSON(Alexander "naryl" Suhoverhov) \
421 PERSON(Alexander "motorsep" Zubov) \
422 PERSON(Amos "torus" Dudley) \
423 PERSON(Andreas "Black" Kirsch) \
424 PERSON(Attila "WW3" Houtkooper) \
426 PERSON(Braden "meoblast001" Walters) \
427 PERSON(Brain Younds) \
428 PERSON(BuddyFriendGuy) \
429 PERSON(Chris "amethyst7" Matz) \
430 PERSON(Christian Ice) \
431 PERSON(Clinton "Kaziganthe" Freeman) \
432 PERSON(Dan "Digger" Korostelev) \
433 PERSON(Dan "Wazat" Hale) \
438 PERSON(Dustin Geeraert) \
439 PERSON(Edgenetwork) \
440 PERSON(Edward "Ed" Holness) \
441 PERSON(Eric "Munyul Verminard" Sambach) \
442 PERSON(Erik "Ablu" Schilling) \
443 PERSON(Fabien "H. Reaper" Tschirhart) \
444 PERSON(Florian Paul "lda17h" Schmidt) \
446 PERSON(Garth "Zombie" Hendy) \
448 PERSON(Gerd "Elysis" Raudenbusch) \
449 PERSON(Gottfried "Toddd" Hofmann) \
450 PERSON(Henning "Tymo" Janssen) \
454 PERSON(Jody Gallagher) \
455 PERSON(Jope "Sless" Withers) \
457 PERSON(Juergen "LowDragon" Timm) \
458 PERSON(KadaverJack) \
459 PERSON(Kevin "Tyrann" Shanahan) \
460 PERSON(Kristian "morfar" Johansson) \
461 PERSON(Kurt Dereli) \
463 PERSON(Lee David Ash) \
464 PERSON(Lee Vermeulen) \
468 PERSON(Marius "GreEn`mArine" Shekow) \
469 PERSON(Marko "Urre" Permanto) \
470 PERSON(Mathieu "Elric" Olivier) \
471 PERSON(Mattrew "Tronyn" Rye) \
475 PERSON(Michael "Tenshihan" Quinn) \
482 PERSON(Paul "Strahlemann" Evers) \
485 PERSON(PlasmaSheep) \
486 PERSON(Przemysław "atheros" Grzywacz) \
487 PERSON(Q1 Retexturing Project) \
489 PERSON(Oleh "BlaXpirit" Prypin) \
490 PERSON(Rick "Rat" Kelley) \
491 PERSON(Robert "ai" Kuroto) \
494 PERSON(Samual "Ares" Lenks) \
495 PERSON(Saulo "mand1nga" Gil) \
499 PERSON(Simon O’Callaghan) \
502 PERSON(SoulKeeper_p) \
505 PERSON(Stephan "esteel" Stahl) \
506 PERSON(Steve Vermeulen) \
510 PERSON(The player with the unnecessarily long name) \
512 PERSON(Ulrich Galbraith) \
514 PERSON(William Libert) \
515 PERSON(William "Willis" Weilep) \
516 PERSON(Yves "EviLair" Allaire) \
517 PERSON(Zac "Mario" Jardine) \
519 PERSON(... and a goat) \
523 int CREDITS_TYPE_TITLE = 2;
524 int CREDITS_TYPE_FUNCTION = 1;
525 int CREDITS_TYPE_PERSON = 0;
526 int CREDITS_TYPE_NL = -1;
527 void credits_add_line(int fh, int n, int type, string line)
529 if (type == CREDITS_TYPE_TITLE)
530 line = strcat("**", line);
531 else if (type == CREDITS_TYPE_FUNCTION)
532 line = strcat("*", line);
535 fputs(fh, strcat(line, "\n"));
537 bufstr_add(n, line, 0);
540 void credits_build(int fh, int n)
542 #define CREDITS_TITLE(t) credits_add_line(fh, n, CREDITS_TYPE_TITLE, t);
543 #define CREDITS_FUNCTION(f) credits_add_line(fh, n, CREDITS_TYPE_FUNCTION, f);
544 #define CREDITS_PERSON(p) credits_add_line(fh, n, CREDITS_TYPE_PERSON, p);
545 #define _CREDITS_PERSON(p) CREDITS_PERSON(#p)
546 #define CREDITS_NL() credits_add_line(fh, n, CREDITS_TYPE_NL, "");
547 CREDITS(CREDITS_TITLE, CREDITS_FUNCTION, _CREDITS_PERSON, CREDITS_PERSON, CREDITS_NL)
549 #undef CREDITS_FUNCTION
550 #undef CREDITS_PERSON
551 #undef _CREDITS_PERSON
557 int n = buf_create();
558 credits_build(-1, n);
562 void credits_export()
564 int fh = fopen("credits.txt", FILE_WRITE);
567 credits_build(fh, -1);
572 entity makeXonoticCreditsList()
575 me = NEW(XonoticCreditsList);
576 me.configureXonoticCreditsList(me);
579 void XonoticCreditsList_configureXonoticCreditsList(entity me)
581 me.configureXonoticListBox(me);
582 me.bufferIndex = credits_get();
583 me.nItems = buf_getsize(me.bufferIndex);
584 if (cvar("_menu_credits_export")) // set by the menu_credits_export alias
587 cvar_set("_menu_credits_export", "0");
590 void XonoticCreditsList_destroy(entity me)
592 buf_del(me.bufferIndex);
594 void XonoticCreditsList_draw(entity me)
598 me.scrollPos = bound(0, (time - me.scrolling) * me.itemHeight, me.nItems * me.itemHeight - 1);
599 me.scrollPosTarget = me.scrollPos;
601 SUPER(XonoticCreditsList).draw(me);
603 void XonoticCreditsList_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
605 SUPER(XonoticCreditsList).resizeNotify(me, relOrigin, relSize, absOrigin, absSize);
607 me.realFontSize_y = me.fontSize / (absSize.y * me.itemHeight);
608 me.realFontSize_x = me.fontSize / (absSize.x * (1 - me.controlWidth));
609 me.realUpperMargin = 0.5 * (1 - me.realFontSize.y);
611 void XonoticCreditsList_drawListBoxItem(entity me, int i, vector absSize, bool isSelected, bool isFocused)
617 s = bufstr_get(me.bufferIndex, i);
619 if(substring(s, 0, 2) == "**")
621 s = substring(s, 2, strlen(s) - 2);
622 theColor = SKINCOLOR_CREDITS_TITLE;
623 theAlpha = SKINALPHA_CREDITS_TITLE;
625 else if(substring(s, 0, 1) == "*")
627 s = substring(s, 1, strlen(s) - 1);
628 theColor = SKINCOLOR_CREDITS_FUNCTION;
629 theAlpha = SKINALPHA_CREDITS_FUNCTION;
633 theColor = SKINCOLOR_CREDITS_PERSON;
634 theAlpha = SKINALPHA_CREDITS_PERSON;
637 draw_CenterText(me.realUpperMargin * eY + 0.5 * eX, s, me.realFontSize, theColor, theAlpha, 0);
640 float XonoticCreditsList_keyDown(entity me, float key, float ascii, float shift)
643 return SUPER(XonoticCreditsList).keyDown(me, key, ascii, shift);