1#include "credits.qh"
2
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(Peter "Morphed" Pielak) \
10		PERSON(Ruszkai "CuBe0wL" Ákos) \
11		PERSON(Samual "Ares" Lenks) \
12		PERSON(TimePath) \
13		PERSON(Tyler "-z-" Mulligan) \
14		PERSON(Zac "Mario" Jardine) \
15	NL() \
16	TITLE(_("Extended Team")) \
17		PERSON(AllieWay) \
18		PERSON(Antonio "terencehill" Piu) \
19		PERSON(Archer) \
20		PERSON(BuddyFriendGuy) \
21		PERSON(Debugger) \
22		PERSON(Diomedes) \
23		PERSON(Freddy) \
24		PERSON(GATTS) \
25		PERSON(Halogene) \
26		PERSON(IDWMaster) \
27		PERSON(Jan "zykure" Behrens) \
28		PERSON(JH0nny) \
29		PERSON(Jubilant) \
30		PERSON(Łukasz "kuniu the frogg" Polek) \
31		PERSON(martin-t) \
32		PERSON(Matthias "matthiaskrgr" Krüger) \
33		PERSON(Mattia "Melanosuchus" Basaglia) \
34		PERSON(MrBougo) \
35		PERSON(Nick "bitbomb" Lucca) \
36		PERSON(nilyt/nyov) \
37		PERSON(Nitroxis) \
38		PERSON(packer) \
39		PERSON(Pearce "theShadow" Michal) \
40		PERSON(Rasmus "FruitieX" Eskola) \
41		PERSON(s1lence) \
42		PERSON(Severin "sev" Meyer) \
43		PERSON(Soelen) \
44		PERSON(Sydes) \
45		PERSON(unfa) \
46	NL() \
47	NL() \
48	FUNCTION(_("Website")) \
49		PERSON(Ant "Antibody" Zucaro (web)) \
50		PERSON(Merlijn Hofstra) \
51		PERSON(Tyler "-z-" Mulligan (web / game)) \
52	NL() \
53	FUNCTION(_("Stats")) \
54		PERSON(Ant "Antibody" Zucaro) \
55		PERSON(Jan "zykure" Behrens) \
56	NL() \
57	FUNCTION(_("Art")) \
58		PERSON(Severin "sev" Meyer) \
59		PERSON(Sahil "DiaboliK" Singhal) \
60		PERSON(Peter "Morphed" Pielak) \
61		PERSON(Sam "LJFHutch" Hutchinson) \
62		PERSON(Pearce "theShadow" Michal) \
63		PERSON(KingPimpCommander) \
64	NL() \
65	FUNCTION(_("Animation")) \
66		PERSON(Sahil "DiaboliK" Singhal) \
67		PERSON(nifrek) \
68	NL() \
69	FUNCTION(_("Level Design")) \
70		PERSON(Amadeusz "amade/proraide" Sławiński) \
71		PERSON(Ben "MooKow" Banker) \
72		PERSON(Cortez) \
73		PERSON(Cuinn "Cuinnton" Herrick) \
74		PERSON(Debugger) \
75		PERSON(Hugo "Calinou" Locurcio) \
76		PERSON(Jakob "tZork" Markström Gröhn) \
77		PERSON(Konrad "Justin" Slawinski) \
78		PERSON(Maddin) \
79		PERSON(L0) \
80		PERSON(Łukasz "kuniu the frogg" Polek) \
81		PERSON(Maik "SavageX" Merten) \
82		PERSON(Marvin "Mirio" Beck) \
83		PERSON(MintOX) \
84		PERSON(packer) \
85		PERSON(Pearce "theShadow" Michal) \
86		PERSON(Rasmus "FruitieX" Eskola) \
87		PERSON(Ruszkai "CuBe0wL" Ákos) \
88		PERSON(Severin "sev" Meyer) \
89		PERSON(ShadoW) \
90		PERSON(t0uYK8Ne) \
91	NL() \
92	FUNCTION(_("Music / Sound FX")) \
93		PERSON(AquaNova (Archer)) \
94		PERSON(blkrbt) \
95		PERSON(chooksta) \
96		PERSON(Independent.nu) \
97		PERSON(Lea "TheAudioMonkey" Edwards) \
98		PERSON([master]mind) \
99		PERSON(Merlijn Hofstra) \
100		PERSON(Mick Rippon) \
101		PERSON(Nick "bitbomb" Lucca) \
102		PERSON(remaxim) \
103		PERSON(Saulo "mand1nga" Gil) \
104		PERSON({SC0RP} - Ian "ID" Dorrell) \
105		PERSON(Stephan) \
106		PERSON(unfa) \
107	NL() \
108	FUNCTION(_("Game Code")) \
109		PERSON(Samual "Ares" Lenks) \
110		PERSON(Rudolf "divVerent" Polzer) \
111		PERSON(Jakob "tZork" Markström Gröhn) \
112		PERSON(Rasmus "FruitieX" Eskola) \
113		PERSON(TimePath) \
114		PERSON(Zac "Mario" Jardine) \
115	NL() \
116	FUNCTION(_("Marketing / PR")) \
117		PERSON(Tyler "-z-" Mulligan) \
118		PERSON(Ruszkai "CuBe0wL" Ákos) \
119		PERSON(Samual "Ares" Lenks) \
120		PERSON(Saulo "mand1nga" Gil) \
121	NL() \
122	FUNCTION(_("Legal")) \
123		PERSON(Rudolf "divVerent" Polzer) \
124		PERSON(Merlijn Hofstra) \
125	NL() \
126	NL() \
127	TITLE(_("Game Engine")) \
128		FUNCTION("DarkPlaces") \
129			PERSON(Forest "LordHavoc" Hale) \
130		NL() \
131		FUNCTION(_("Engine Additions")) \
132			PERSON(Rudolf "divVerent" Polzer) \
133			PERSON(Samual "Ares" Lenks) \
134		NL() \
135	NL() \
136	TITLE(_("Compiler")) \
137		FUNCTION("GMQCC") \
138			PERSON(Wolfgang "Blub\0" Bumiller) \
139			PERSON(Dale "graphitemaster" Weiler) \
140		NL() \
141	NL() \
142	TITLE(_("Other Active Contributors")) \
143		PERSON(Erik "Ablu" Schilling) \
144		PERSON(Mircea "Taoki" Kitsune) \
145		PERSON(Penguinum) \
146	NL() \
147	NL() \
148	TITLE(_("Translators")) \
149		NL() \
150		FUNCTION(_("Asturian")) \
151			PERSON(Llumex03) \
152			PERSON(Tornes "Tornes.Llume" Ḷḷume) \
153			PERSON(Ximielga) \
154		NL() \
155		FUNCTION(_("Belarusian")) \
156			PERSON(Mihail "meequz" Varantsou) \
157		NL() \
158		FUNCTION(_("Bulgarian")) \
159			PERSON(Alexander "alex4o" Bonin) \
160			PERSON(ifohancroft) \
161			PERSON(lokster) \
162			PERSON(set_killer) \
163			PERSON(ubone) \
164		NL() \
165		FUNCTION(_("Chinese (China)")) \
166			PERSON(Antonidas) \
167			PERSON(Armcoon) \
168			PERSON(kalawore) \
169			PERSON(sapphireliu) \
170		NL() \
171		FUNCTION(_("Chinese (Taiwan)")) \
172			PERSON(Alisha) \
173			PERSON(Armcoon) \
174			PERSON(Jeff "s8321414" Huang) \
175		NL() \
176		FUNCTION(_("Cornish")) \
177			PERSON(Nicky "nrowe" Rowe) \
178		NL() \
179		FUNCTION(_("Czech")) \
180			PERSON(shogun assassin/woky) \
181			PERSON(Superovoce) \
182			PERSON(Tomáš "CZHeron" Volavka) \
183		NL() \
184		FUNCTION(_("Dutch")) \
185			PERSON(Alexander "freefang" van Dam) \
186			PERSON(Jonathan "Jonakeys" van der Steege) \
187			PERSON(PinkRobot) \
188			PERSON(vegiburger) \
189		NL() \
190		FUNCTION(_("English (Australia)")) \
191			PERSON(Laurene "sunflowers" Albrand) \
192			PERSON(Stuart "Cefiar" Young) \
193			PERSON(Zac "Mario" Jardine) \
194		NL() \
195		FUNCTION(_("Finnish")) \
196			PERSON(Jonas "PowaTree" Sahlberg) \
197			PERSON(Henry "Exitium" Sanmark) \
198			PERSON(Rasmus "FruitieX" Eskola) \
199		NL() \
200		FUNCTION(_("French")) \
201			PERSON(Hugo "Calinou" Locurcio) \
202			PERSON(Kim "coughingmouse" Lee) \
203			PERSON(Maxime "Taximus" Paradis) \
204			PERSON(RedGuff) \
205			PERSON(Thomas "illwieckz" Debesse) \
206			PERSON(Yannick "SpiKe" Le Guen) \
207		NL() \
208		FUNCTION(_("German")) \
209			PERSON(Brot) \
210			PERSON(cvcxc) \
211			PERSON(Erik "Ablu" Schilling) \
212			PERSON(Jope "Sless" Withers) \
213			PERSON(Marvin "Mirio" Beck) \
214			PERSON(Paul "Snapper") \
215			PERSON(Rudolf "divVerent" Polzer) \
216			PERSON(Wuzzy) \
217			PERSON(Yepoleb) \
218		NL() \
219		FUNCTION(_("Greek")) \
220			PERSON_("Γιάννης \"Evropi\" Ανθυμίδης") \
221			PERSON(Konstantinos "LDinos" Mihalenas) \
222			PERSON(Savoritias) \
223			PERSON(Vindex) \
224		NL() \
225		FUNCTION(_("Hungarian")) \
226			PERSON(Ruszkai "CuBe0wL" Ákos) \
227			PERSON(xaN1C4n3) \
228		NL() \
229		FUNCTION(_("Italian")) \
230			PERSON(Antonio "terencehill" Piu) \
231			PERSON(Felice "MaidenBeast" Sallustio) \
232			PERSON(stdi) \
233			PERSON(XCostaX) \
234		NL() \
235		FUNCTION(_("Kazakh")) \
236			PERSON("Артем "bystrov.arterm" Быстров") \
237		NL() \
238		FUNCTION(_("Korean")) \
239			PERSON(Jisoo "s6e9x" Lim) \
240			PERSON(Kim "coughingmouse" Lee) \
241		NL() \
242		FUNCTION(_("Polish")) \
243			PERSON(4m) \
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) \
248		NL() \
249		FUNCTION(_("Portuguese")) \
250			PERSON(Ivan Paulos "greylica" Tomé) \
251			PERSON(Jean Trindade "Muleke_Trairao" Pereira) \
252			PERSON(Ricardo Manuel "Hellgardia" da Cruz Coelho da Silva) \
253			PERSON(xXxCHAOTICxXx) \
254		NL() \
255		FUNCTION(_("Romanian")) \
256			PERSON(Adrian-Ciprian "adrian.tinjala" Tînjală) \
257			PERSON(BusterDBK) \
258			PERSON(Mircea "Taoki" Kitsune) \
259			PERSON(Sorin "unic_sorin" Botirla) \
260			PERSON(Tudor "TropiKo" Ionel) \
261		NL() \
262		FUNCTION(_("Russian")) \
263			PERSON(Alex "alextalker7" Talker) \
264			PERSON(Alexandr "zrg") \
265			PERSON(Andrei "adem4ik" Stepanov) \
266			PERSON(Andrey "dekrY" P.) \
267			PERSON(gravicappa) \
268			PERSON(Hot Dog) \
269			PERSON(Lord Canistra) \
270			PERSON(Nikoli) \
271			PERSON(Sergej "Clearness High" Lutsyk) \
272		NL() \
273		FUNCTION(_("Serbian")) \
274			PERSON_("Саша \"salepetronije\" Петровић") \
275			PERSON(Pendulla) \
276			PERSON(Rafael "Ristovski") \
277		NL() \
278		FUNCTION(_("Spanish")) \
279			PERSON_("0000simon") \
280			PERSON(Alan "aagp" Garcia) \
281			PERSON(Ari_tent) \
282			PERSON(brunodeleo) \
283			PERSON(Kammy) \
284			PERSON(roader_gentoo) \
285			PERSON(Rodrigo Mouton Laudin) \
286			PERSON(SouL) \
287		NL() \
288		FUNCTION(_("Swedish")) \
289			PERSON(Karl-Oskar "machine" Rikås) \
290			PERSON(marcus256) \
291		NL() \
292		FUNCTION(_("Ukrainian")) \
293			PERSON(Dmitro "Gamebot" Sokhin) \
294			PERSON(Oleh "BlaXpirit" Prypin) \
295			PERSON(Vasyl "Harmata" Melnyk) \
296			PERSON(Yuriy "herrniemand" Ackermann) \
297		NL() \
298	NL() \
299	TITLE(_("Past Contributors")) \
300		PERSON(Akari) \
301		PERSON(Alexander "naryl" Suhoverhov) \
302		PERSON(Alexander "motorsep" Zubov) \
303		PERSON(Amos "torus" Dudley) \
304		PERSON(Andreas "Black" Kirsch) \
305		PERSON(Attila "WW3" Houtkooper) \
306		PERSON(BigMac) \
307		PERSON(Braden "meoblast001" Walters) \
308		PERSON(Brain Younds) \
309		PERSON(Chris "amethyst7" Matz) \
310		PERSON(Christian Ice) \
311		PERSON(Clinton "Kaziganthe" Freeman) \
312		PERSON(Dan "Digger" Korostelev) \
313		PERSON(Dan "Wazat" Hale) \
314		PERSON(Dokujisan) \
315		PERSON(Donkey) \
316		PERSON(dstrek) \
317		PERSON(Dustin Geeraert) \
318		PERSON(Edgenetwork) \
319		PERSON(Edward "Ed" Holness) \
320		PERSON(Eric "Munyul Verminard" Sambach) \
321		PERSON(Fabien "H. Reaper" Tschirhart) \
322		PERSON(Florian Paul "lda17h" Schmidt) \
323		PERSON(FrikaC) \
324		PERSON(Garth "Zombie" Hendy) \
325		PERSON(Gerd "Elysis" Raudenbusch) \
326		PERSON(Gottfried "Toddd" Hofmann) \
327		PERSON(Henning "Tymo" Janssen) \
328		PERSON(Innovati) \
329		PERSON(Jitspoe) \
330		PERSON(Jody Gallagher) \
331		PERSON(Jope "Sless" Withers) \
332		PERSON(Juergen "LowDragon" Timm) \
333		PERSON(KadaverJack) \
334		PERSON(Kevin "Tyrann" Shanahan) \
335		PERSON(Kristian "morfar" Johansson) \
336		PERSON(Kurt Dereli) \
337		PERSON(lcatlnx) \
338		PERSON(Lee David Ash) \
339		PERSON(Lee Vermeulen) \
340		PERSON(leileilol) \
341		PERSON(magorian) \
342		PERSON(Marius "GreEn`mArine" Shekow) \
343		PERSON(Marko "Urre" Permanto) \
344		PERSON(Mathieu "Elric" Olivier) \
345		PERSON(Mattrew "Tronyn" Rye) \
346		PERSON(MauveBib) \
347		PERSON(Mephisto) \
348		PERSON(michaelb) \
349		PERSON(Michael "Tenshihan" Quinn) \
350		PERSON(Mepper) \
351		PERSON(Munyul) \
352		PERSON(Netzwerg) \
353		PERSON(NoelCower) \
354		PERSON(Parapraxis) \
355		PERSON(parasti) \
356		PERSON(Paul "Strahlemann" Evers) \
357		PERSON(Paul Scott) \
358		PERSON(Petithomme) \
359		PERSON(PlasmaSheep) \
360		PERSON(Przemysław "atheros" Grzywacz) \
361		PERSON(Q1 Retexturing Project) \
362		PERSON(Qantourisc) \
363		PERSON(Oleh "BlaXpirit" Prypin) \
364		PERSON(Rick "Rat" Kelley) \
365		PERSON(Robert "ai" Kuroto) \
366		PERSON(Ronan) \
367		PERSON(Sajt) \
368		PERSON(Saulo "mand1nga" Gil) \
369		PERSON(Shaggy) \
370		PERSON(Shank) \
371		PERSON(Simon O’Callaghan) \
372		PERSON(SomeGuy) \
373		PERSON(SoulKeeper_p) \
374		PERSON(Spike) \
375		PERSON(Spirit) \
376		PERSON(Stephan "esteel" Stahl) \
377		PERSON(Steve Vermeulen) \
378		PERSON(Supajoe) \
379		PERSON(Tei) \
380		PERSON(The player with the unnecessarily long name) \
381		PERSON(Tomaz) \
382		PERSON(Ulrich Galbraith) \
383		PERSON(Vortex) \
384		PERSON(William Libert) \
385		PERSON(William "Willis" Weilep) \
386		PERSON(Yves "EviLair" Allaire) \
387		PERSON(Zenex) \
388		/**/
389
390int credits_get()
391{
392	int n = buf_create();
393	#define CREDITS_TITLE(t) bufstr_add(n, strcat("**", t), 0);
394	#define CREDITS_FUNCTION(f) bufstr_add(n, strcat("*", f), 0);
395	#define CREDITS_PERSON(p) bufstr_add(n, p, 0);
396	#define _CREDITS_PERSON(p) CREDITS_PERSON(#p)
397	#define CREDITS_NL() bufstr_add(n, "", 0);
398    CREDITS(CREDITS_TITLE, CREDITS_FUNCTION, _CREDITS_PERSON, CREDITS_PERSON, CREDITS_NL)
399	#undef CREDITS_TITLE
400	#undef CREDITS_FUNCTION
401	#undef CREDITS_PERSON
402	#undef _CREDITS_PERSON
403	#undef CREDITS_NL
404	return n;
405}
406
407#undef CREDITS
408
409entity makeXonoticCreditsList()
410{
411	entity me;
412	me = NEW(XonoticCreditsList);
413	me.configureXonoticCreditsList(me);
414	return me;
415}
416void XonoticCreditsList_configureXonoticCreditsList(entity me)
417{
418	me.configureXonoticListBox(me);
419    me.bufferIndex = credits_get();
420	me.nItems = buf_getsize(me.bufferIndex);
421}
422void XonoticCreditsList_destroy(entity me)
423{
424	buf_del(me.bufferIndex);
425}
426void XonoticCreditsList_draw(entity me)
427{
428	if(me.scrolling)
429	{
430		me.scrollPos = bound(0, (time - me.scrolling) * me.itemHeight, me.nItems * me.itemHeight - 1);
431		me.scrollPosTarget = me.scrollPos;
432	}
433	SUPER(XonoticCreditsList).draw(me);
434}
435void XonoticCreditsList_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
436{
437	SUPER(XonoticCreditsList).resizeNotify(me, relOrigin, relSize, absOrigin, absSize);
438
439	me.realFontSize_y = me.fontSize / (absSize.y * me.itemHeight);
440	me.realFontSize_x = me.fontSize / (absSize.x * (1 - me.controlWidth));
441	me.realUpperMargin = 0.5 * (1 - me.realFontSize.y);
442}
443void XonoticCreditsList_drawListBoxItem(entity me, int i, vector absSize, bool isSelected, bool isFocused)
444{
445	string s;
446	float theAlpha;
447	vector theColor;
448
449	s = bufstr_get(me.bufferIndex, i);
450
451	if(substring(s, 0, 2) == "**")
452	{
453		s = substring(s, 2, strlen(s) - 2);
454		theColor = SKINCOLOR_CREDITS_TITLE;
455		theAlpha = SKINALPHA_CREDITS_TITLE;
456	}
457	else if(substring(s, 0, 1) == "*")
458	{
459		s = substring(s, 1, strlen(s) - 1);
460		theColor = SKINCOLOR_CREDITS_FUNCTION;
461		theAlpha = SKINALPHA_CREDITS_FUNCTION;
462	}
463	else
464	{
465		theColor = SKINCOLOR_CREDITS_PERSON;
466		theAlpha = SKINALPHA_CREDITS_PERSON;
467	}
468
469	draw_CenterText(me.realUpperMargin * eY + 0.5 * eX, s, me.realFontSize, theColor, theAlpha, 0);
470}
471
472float XonoticCreditsList_keyDown(entity me, float key, float ascii, float shift)
473{
474	me.scrolling = 0;
475	return SUPER(XonoticCreditsList).keyDown(me, key, ascii, shift);
476}
477