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