3 #define CREDITS(TITLE, FUNCTION, PERSON, PERSON_, NL) \
4 TITLE(_("Core Team")) \
5 PERSON(Rudolf "divVerent" Polzer) \
6 PERSON(Ant "Antibody" Zucaro) \
7 PERSON(Marvin "Mirio" Beck) \
8 PERSON(Merlijn Hofstra) \
9 PERSON(Ruszkai "CuBe0wL" Ákos) \
10 PERSON(Tyler "-z-" Mulligan) \
11 PERSON(Zac "Mario" Jardine) \
13 TITLE(_("Extended Team")) \
14 PERSON(Antonio "terencehill" Piu) \
15 PERSON(bones_was_here) \
16 PERSON(David "Cloudwalk" Knapp) \
19 PERSON(Jan "zykure" Behrens) \
25 PERSON(Severin "sev" Meyer) \
27 PERSON(Thomas "illwieckz" Debesse) \
28 PERSON(Victor "LegendGuard" Jaume) \
32 FUNCTION(_("Website")) \
33 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(_("Level Design")) \
54 PERSON(Amadeusz "amade/proraide" Sławiński) \
55 PERSON(Ben "MooKow" Banker) \
57 PERSON(Cuinn "Cuinnton" Herrick) \
59 PERSON(Hugo "Calinou" Locurcio) \
60 PERSON(Jakob "tZork" Markström Gröhn) \
61 PERSON(Konrad "Justin" Slawinski) \
64 PERSON(Łukasz "kuniu the frogg" Polek) \
65 PERSON(Maik "SavageX" Merten) \
66 PERSON(Marvin "Mirio" Beck) \
69 PERSON(Pearce "theShadow" Michal) \
70 PERSON(Rasmus "FruitieX" Eskola) \
71 PERSON(Ruszkai "CuBe0wL" Ákos) \
72 PERSON(Severin "sev" Meyer) \
76 FUNCTION(_("Music / Sound FX")) \
77 PERSON(AquaNova (Archer)) \
80 PERSON(Independent.nu) \
81 PERSON(Lea "TheAudioMonkey" Edwards) \
82 PERSON([master]mind) \
83 PERSON(Merlijn Hofstra) \
85 PERSON(Nick "bitbomb" Lucca) \
87 PERSON(Saulo "mand1nga" Gil) \
88 PERSON({SC0RP} - Ian "ID" Dorrell) \
92 FUNCTION(_("Game Code")) \
93 PERSON(Antonio "terencehill" Piu) \
94 PERSON(Jakob "tZork" Markström Gröhn) \
96 PERSON(Mattia "Melanosuchus" Basaglia) \
97 PERSON(Matthias "matthiaskrgr" Krüger) \
98 PERSON(Rasmus "FruitieX" Eskola) \
99 PERSON(Rudolf "divVerent" Polzer) \
100 PERSON(Samual "Ares" Lenks) \
102 PERSON(Victor "LegendGuard" Jaume) \
104 PERSON(Zac "Mario" Jardine) \
106 FUNCTION(_("Marketing / PR")) \
107 PERSON(Tyler "-z-" Mulligan) \
108 PERSON(Ruszkai "CuBe0wL" Ákos) \
109 PERSON(Samual "Ares" Lenks) \
110 PERSON(Saulo "mand1nga" Gil) \
112 FUNCTION(_("Legal")) \
113 PERSON(Rudolf "divVerent" Polzer) \
114 PERSON(Merlijn Hofstra) \
117 TITLE(_("Game Engine")) \
118 FUNCTION("DarkPlaces") \
119 PERSON(Ashley Rose "LadyHavoc" Hale) \
121 FUNCTION(_("Engine Additions")) \
122 PERSON(David "Cloudwalk" Knapp) \
123 PERSON(Rudolf "divVerent" Polzer) \
124 PERSON(Samual "Ares" Lenks) \
127 TITLE(_("Compiler")) \
129 PERSON(Wolfgang "Blub\0" Bumiller) \
130 PERSON(Dale "graphitemaster" Weiler) \
133 TITLE(_("Other Active Contributors")) \
135 PERSON(Mircea "Taoki" Kitsune) \
138 PERSON(Victor "LegendGuard" Jaume) \
141 TITLE(_("Translators")) \
143 FUNCTION(_("Asturian")) \
145 PERSON(Tornes "Tornes.Llume" Ḷḷume) \
148 FUNCTION(_("Belarusian")) \
149 PERSON(Mihail "meequz" Varantsou) \
151 FUNCTION(_("Bulgarian")) \
152 PERSON(Alexander "alex4o" Bonin) \
153 PERSON(ifohancroft) \
158 FUNCTION(_("Chinese (China)")) \
162 PERSON(sapphireliu) \
164 FUNCTION(_("Chinese (Taiwan)")) \
167 PERSON(Jeff "s8321414" Huang) \
169 FUNCTION(_("Cornish")) \
170 PERSON(Nicky "nrowe" Rowe) \
172 FUNCTION(_("Czech")) \
173 PERSON(shogun assassin/woky) \
175 PERSON(Tomáš "CZHeron" Volavka) \
177 FUNCTION(_("Dutch")) \
178 PERSON(Alexander "freefang" van Dam) \
179 PERSON(Joeke "Mappack" de Graaf) \
180 PERSON(Jonathan "Jonakeys" van der Steege) \
184 FUNCTION(_("English (Australia)")) \
185 PERSON(Laurene "sunflowers" Albrand) \
186 PERSON(Stuart "Cefiar" Young) \
187 PERSON(Zac "Mario" Jardine) \
189 FUNCTION(_("Finnish")) \
190 PERSON(Jonas "PowaTree" Sahlberg) \
191 PERSON(Henry "Exitium" Sanmark) \
192 PERSON(Rasmus "FruitieX" Eskola) \
194 FUNCTION(_("French")) \
195 PERSON(Hugo "Calinou" Locurcio) \
196 PERSON(Kim "coughingmouse" Lee) \
197 PERSON(Maxime "Taximus" Paradis) \
199 PERSON(Thomas "illwieckz" Debesse) \
200 PERSON(Yannick "SpiKe" Le Guen) \
202 FUNCTION(_("German")) \
205 PERSON(Erik "Ablu" Schilling) \
206 PERSON(Jope "Sless" Withers) \
207 PERSON(Marvin "Mirio" Beck) \
208 PERSON(Paul "Snapper") \
209 PERSON(Rudolf "divVerent" Polzer) \
213 FUNCTION(_("Greek")) \
214 PERSON_("Γιάννης \"Evropi\" Ανθυμίδης") \
215 PERSON(Konstantinos "LDinos" Mihalenas) \
219 FUNCTION(_("Hungarian")) \
220 PERSON(Ruszkai "CuBe0wL" Ákos) \
223 FUNCTION(_("Irish")) \
224 PERSON(Kevin "kscanne" Scannell) \
226 FUNCTION(_("Italian")) \
227 PERSON(Antonio "terencehill" Piu) \
228 PERSON(Felice "MaidenBeast" Sallustio) \
232 FUNCTION(_("Japanese")) \
233 PERSON(Victor "LegendGuard" Jaume) \
235 FUNCTION(_("Kazakh")) \
236 PERSON("Артем "bystrov.arterm" Быстров") \
238 FUNCTION(_("Korean")) \
239 PERSON(Jisoo "s6e9x" Lim) \
240 PERSON(Kim "coughingmouse" Lee) \
242 FUNCTION(_("Polish")) \
244 PERSON(Alex "tiprogrammierer.alex" Progger) \
245 PERSON(Amadeusz "amade/proraide" Sławiński) \
246 PERSON(Artur "artur9010" Motyka) \
247 PERSON(Jakub "KubeQ11" Pędziszewski) \
250 FUNCTION(_("Portuguese")) \
251 PERSON(Ivan Paulos "greylica" Tomé) \
252 PERSON(Jean Trindade "Muleke_Trairao" Pereira) \
253 PERSON(Ricardo Manuel "Hellgardia" da Cruz Coelho da Silva) \
254 PERSON(xXxCHAOTICxXx) \
256 FUNCTION(_("Romanian")) \
257 PERSON(Adrian-Ciprian "adrian.tinjala" Tînjală) \
259 PERSON(Mircea "Taoki" Kitsune) \
260 PERSON(Sorin "unic_sorin" Botirla) \
261 PERSON(Tudor "TropiKo" Ionel) \
263 FUNCTION(_("Russian")) \
264 PERSON(Alex "alextalker7" Talker) \
265 PERSON(Alexandr "zrg") \
266 PERSON(Andrei "adem4ik" Stepanov) \
267 PERSON(Andrey "dekrY" P.) \
270 PERSON(Lord Canistra) \
272 PERSON(Sergej "Clearness High" Lutsyk) \
274 FUNCTION(_("Scottish Gaelic")) \
275 PERSON_("GunChleoc") \
277 FUNCTION(_("Serbian")) \
278 PERSON_("Саша \"salepetronije\" Петровић") \
279 PERSON(Marko M. Kostić) \
281 PERSON(Rafael "Ristovski") \
283 FUNCTION(_("Spanish")) \
284 PERSON_("0000simon") \
285 PERSON(Alan "aagp" Garcia) \
289 PERSON(roader_gentoo) \
290 PERSON(Rodrigo Mouton Laudin) \
292 PERSON(Starfire24680) \
293 PERSON(Victor "LegendGuard" Jaume) \
295 FUNCTION(_("Swedish")) \
296 PERSON(Karl-Oskar "machine" Rikås) \
299 FUNCTION(_("Ukrainian")) \
300 PERSON(Dmitro "Gamebot" Sokhin) \
301 PERSON(Oleh "BlaXpirit" Prypin) \
302 PERSON(Vasyl "Harmata" Melnyk) \
303 PERSON(Yuriy "herrniemand" Ackermann) \
306 TITLE(_("Past Contributors")) \
308 PERSON(Alexander "naryl" Suhoverhov) \
309 PERSON(Alexander "motorsep" Zubov) \
310 PERSON(Amos "torus" Dudley) \
311 PERSON(Andreas "Black" Kirsch) \
312 PERSON(Attila "WW3" Houtkooper) \
314 PERSON(Braden "meoblast001" Walters) \
315 PERSON(Brain Younds) \
316 PERSON(BuddyFriendGuy) \
317 PERSON(Chris "amethyst7" Matz) \
318 PERSON(Christian Ice) \
319 PERSON(Clinton "Kaziganthe" Freeman) \
320 PERSON(Dan "Digger" Korostelev) \
321 PERSON(Dan "Wazat" Hale) \
326 PERSON(Dustin Geeraert) \
327 PERSON(Edgenetwork) \
328 PERSON(Edward "Ed" Holness) \
329 PERSON(Eric "Munyul Verminard" Sambach) \
330 PERSON(Erik "Ablu" Schilling) \
331 PERSON(Fabien "H. Reaper" Tschirhart) \
332 PERSON(Florian Paul "lda17h" Schmidt) \
334 PERSON(Garth "Zombie" Hendy) \
336 PERSON(Gerd "Elysis" Raudenbusch) \
337 PERSON(Gottfried "Toddd" Hofmann) \
338 PERSON(Henning "Tymo" Janssen) \
342 PERSON(Jody Gallagher) \
343 PERSON(Jope "Sless" Withers) \
345 PERSON(Juergen "LowDragon" Timm) \
346 PERSON(KadaverJack) \
347 PERSON(Kevin "Tyrann" Shanahan) \
348 PERSON(Kristian "morfar" Johansson) \
349 PERSON(Kurt Dereli) \
351 PERSON(Lee David Ash) \
352 PERSON(Lee Vermeulen) \
356 PERSON(Marius "GreEn`mArine" Shekow) \
357 PERSON(Marko "Urre" Permanto) \
358 PERSON(Mathieu "Elric" Olivier) \
359 PERSON(Mattrew "Tronyn" Rye) \
363 PERSON(Michael "Tenshihan" Quinn) \
370 PERSON(Paul "Strahlemann" Evers) \
373 PERSON(PlasmaSheep) \
374 PERSON(Przemysław "atheros" Grzywacz) \
375 PERSON(Q1 Retexturing Project) \
377 PERSON(Oleh "BlaXpirit" Prypin) \
378 PERSON(Rick "Rat" Kelley) \
379 PERSON(Robert "ai" Kuroto) \
382 PERSON(Samual "Ares" Lenks) \
383 PERSON(Saulo "mand1nga" Gil) \
387 PERSON(Simon O’Callaghan) \
390 PERSON(SoulKeeper_p) \
393 PERSON(Stephan "esteel" Stahl) \
394 PERSON(Steve Vermeulen) \
398 PERSON(The player with the unnecessarily long name) \
400 PERSON(Ulrich Galbraith) \
402 PERSON(William Libert) \
403 PERSON(William "Willis" Weilep) \
404 PERSON(Yves "EviLair" Allaire) \
406 PERSON(... and a goat) \
411 int n = buf_create();
412 #define CREDITS_TITLE(t) bufstr_add(n, strcat("**", t), 0);
413 #define CREDITS_FUNCTION(f) bufstr_add(n, strcat("*", f), 0);
414 #define CREDITS_PERSON(p) bufstr_add(n, p, 0);
415 #define _CREDITS_PERSON(p) CREDITS_PERSON(#p)
416 #define CREDITS_NL() bufstr_add(n, "", 0);
417 CREDITS(CREDITS_TITLE, CREDITS_FUNCTION, _CREDITS_PERSON, CREDITS_PERSON, CREDITS_NL)
419 #undef CREDITS_FUNCTION
420 #undef CREDITS_PERSON
421 #undef _CREDITS_PERSON
428 entity makeXonoticCreditsList()
431 me = NEW(XonoticCreditsList);
432 me.configureXonoticCreditsList(me);
435 void XonoticCreditsList_configureXonoticCreditsList(entity me)
437 me.configureXonoticListBox(me);
438 me.bufferIndex = credits_get();
439 me.nItems = buf_getsize(me.bufferIndex);
441 void XonoticCreditsList_destroy(entity me)
443 buf_del(me.bufferIndex);
445 void XonoticCreditsList_draw(entity me)
449 me.scrollPos = bound(0, (time - me.scrolling) * me.itemHeight, me.nItems * me.itemHeight - 1);
450 me.scrollPosTarget = me.scrollPos;
452 SUPER(XonoticCreditsList).draw(me);
454 void XonoticCreditsList_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
456 SUPER(XonoticCreditsList).resizeNotify(me, relOrigin, relSize, absOrigin, absSize);
458 me.realFontSize_y = me.fontSize / (absSize.y * me.itemHeight);
459 me.realFontSize_x = me.fontSize / (absSize.x * (1 - me.controlWidth));
460 me.realUpperMargin = 0.5 * (1 - me.realFontSize.y);
462 void XonoticCreditsList_drawListBoxItem(entity me, int i, vector absSize, bool isSelected, bool isFocused)
468 s = bufstr_get(me.bufferIndex, i);
470 if(substring(s, 0, 2) == "**")
472 s = substring(s, 2, strlen(s) - 2);
473 theColor = SKINCOLOR_CREDITS_TITLE;
474 theAlpha = SKINALPHA_CREDITS_TITLE;
476 else if(substring(s, 0, 1) == "*")
478 s = substring(s, 1, strlen(s) - 1);
479 theColor = SKINCOLOR_CREDITS_FUNCTION;
480 theAlpha = SKINALPHA_CREDITS_FUNCTION;
484 theColor = SKINCOLOR_CREDITS_PERSON;
485 theAlpha = SKINALPHA_CREDITS_PERSON;
488 draw_CenterText(me.realUpperMargin * eY + 0.5 * eX, s, me.realFontSize, theColor, theAlpha, 0);
491 float XonoticCreditsList_keyDown(entity me, float key, float ascii, float shift)
494 return SUPER(XonoticCreditsList).keyDown(me, key, ascii, shift);