Ticket #3744: credits.patch

File credits.patch, 50.0 KB (added by Itms, 8 years ago)
  • new file inaries/data/mods/public/gui/credits/credits.js

    diff --git a/binaries/data/mods/public/gui/credits/credits.js b/binaries/data/mods/public/gui/credits/credits.js
    new file mode 100644
    index 0000000..6235e3d
    - +  
     1var g_PanelNames = ["special", "programming", "art", "translators", "misc", "donators"];
     2var g_PanelTexts = [];
     3var g_ActivePanel = -1;
     4
     5function init()
     6{
     7    // Load credits list from the disk and parse them
     8    for (let name of g_PanelNames)
     9        g_PanelTexts.push(parseJSONCredits(name));
     10
     11    selectPanel(0);
     12}
     13
     14// Run through a "Content" list and parse elements for formatting and translation
     15function parseHelper(list)
     16{
     17    let result = "";
     18
     19    for (let object of list)
     20    {
     21        if (object.Title)
     22            result += "[font=\"sans-bold-stroke-14\"]" + translate(object.Title) + "\n";
     23
     24        if (object.Subtitle)
     25            result += "[font=\"sans-bold-14\"]" + translate(object.Subtitle) + "\n";
     26
     27        if (object.List)
     28        {
     29            for (let element of object.List)
     30            {
     31                if (element.nick && element.name)
     32                    result += "[font=\"sans-14\"]" + sprintf(translate("%(nick)s - %(name)s"), { "nick": element.nick, "name": element.name }) + "\n";
     33                else if (element.nick)
     34                    result += "[font=\"sans-14\"]" + element.nick + "\n";
     35                else if (element.name)
     36                    result += "[font=\"sans-14\"]" + element.name + "\n";
     37            }
     38            result += "\n";
     39        }
     40
     41        if (object.Content)
     42            result += "\n" + parseHelper(object.Content) + "\n";
     43    }
     44
     45    return result;
     46}
     47
     48function parseJSONCredits(panelName)
     49{
     50    let json = Engine.ReadJSONFile("gui/credits/texts/" + panelName + ".json");
     51    if (!json || !json.Content)
     52    {
     53        error("Could not load credits for " + panelName + "!");
     54        return "";
     55    }
     56
     57    return parseHelper(json.Content);
     58}
     59
     60function selectPanel(i)
     61{
     62    if (g_ActivePanel != -1)
     63    {
     64        let oldPanelButton = Engine.GetGUIObjectByName(g_PanelNames[g_ActivePanel] + "PanelButton");
     65        oldPanelButton.sprite = "BackgroundBox";
     66    }
     67
     68    g_ActivePanel = i;
     69    let newPanelButton = Engine.GetGUIObjectByName(g_PanelNames[g_ActivePanel] + "PanelButton");
     70    newPanelButton.sprite = "ForegroundBox";
     71
     72    let creditsText = Engine.GetGUIObjectByName("creditsText");
     73    creditsText.caption = g_PanelTexts[i];
     74}
  • new file inaries/data/mods/public/gui/credits/credits.xml

    diff --git a/binaries/data/mods/public/gui/credits/credits.xml b/binaries/data/mods/public/gui/credits/credits.xml
    new file mode 100644
    index 0000000..055e579
    - +  
     1<?xml version="1.0" encoding="utf-8"?>
     2
     3<!--
     4==========================================
     5- CREDITS PAGE -
     6==========================================
     7-->
     8
     9<objects>
     10    <script file="gui/common/functions_global_object.js"/>
     11    <script file="gui/credits/credits.js"/>
     12
     13    <!-- Add a translucent black background to fade out the menu page -->
     14    <object type="image" z="0" sprite="ModernFade"/>
     15
     16    <object type="image" style="ModernDialog" size="50%-473 24 50%+473 100%-24">
     17        <object style="ModernLabelText" type="text" size="50%-128 -18 50%+128 14">
     18            <translatableAttribute id="caption">0 A.D. Credits</translatableAttribute>
     19        </object>
     20
     21        <object name="specialPanelButton" type="button" sprite="BackgroundBox" size="20 50 150 80">
     22            <action on="Press">selectPanel(0);</action>
     23            <object type="text" style="ModernLabelText" ghost="true">
     24                <translatableAttribute id="caption">Special Credits</translatableAttribute>
     25            </object>
     26        </object>
     27
     28        <object name="programmingPanelButton" type="button" sprite="BackgroundBox" size="155 50 305 80">
     29            <action on="Press">selectPanel(1);</action>
     30            <object type="text" style="ModernLabelText" ghost="true">
     31                <translatableAttribute id="caption">Programming</translatableAttribute>
     32            </object>
     33        </object>
     34
     35        <object name="artPanelButton" type="button" sprite="BackgroundBox" size="310 50 460 80">
     36            <action on="Press">selectPanel(2);</action>
     37            <object type="text" style="ModernLabelText" ghost="true">
     38                <translatableAttribute id="caption">Art</translatableAttribute>
     39            </object>
     40        </object>
     41
     42        <object name="translatorsPanelButton" type="button" sprite="BackgroundBox" size="465 50 615 80">
     43            <action on="Press">selectPanel(3);</action>
     44            <object type="text" style="ModernLabelText" ghost="true">
     45                <translatableAttribute id="caption">Translators</translatableAttribute>
     46            </object>
     47        </object>
     48
     49        <object name="miscPanelButton" type="button" sprite="BackgroundBox" size="620 50 770 80">
     50            <action on="Press">selectPanel(4);</action>
     51            <object type="text" style="ModernLabelText" ghost="true">
     52                <translatableAttribute id="caption">Miscellaneous</translatableAttribute>
     53            </object>
     54        </object>
     55
     56        <object name="donatorsPanelButton" type="button" sprite="BackgroundBox" size="775 50 925 80">
     57            <action on="Press">selectPanel(5);</action>
     58            <object type="text" style="ModernLabelText" ghost="true">
     59                <translatableAttribute id="caption">Donators</translatableAttribute>
     60            </object>
     61        </object>
     62
     63        <object type="image" sprite="ModernFade" size="20 85 100%-20 100%-54">
     64            <object name="creditsText" type="text" style="textPanel"/>
     65        </object>
     66
     67        <!-- Close dialog -->
     68        <object type="button" style="ModernButtonRed" size="100%-200 100%-45 100%-17 100%-17" hotkey="cancel">
     69            <translatableAttribute id="caption">Close</translatableAttribute>
     70            <action on="Press">
     71                Engine.SwitchGuiPage("page_pregame.xml");
     72            </action>
     73        </object>
     74    </object>
     75</objects>
  • new file inaries/data/mods/public/gui/credits/sprites.xml

    diff --git a/binaries/data/mods/public/gui/credits/sprites.xml b/binaries/data/mods/public/gui/credits/sprites.xml
    new file mode 100644
    index 0000000..a9eda6f
    - +  
     1<?xml version="1.0" encoding="utf-8"?>
     2
     3<sprites>
     4    <sprite name="BackgroundBox">
     5        <image backcolor="50 35 0 120" size="0 0 100% 100%"/>
     6        <image backcolor="gold" size="0 0 1 100%"/>
     7        <image backcolor="gold" size="1 0 100%-1 1"/>
     8        <image backcolor="gold" size="100%-1 0 100% 100%"/>
     9        <image backcolor="gold" size="0 100%-1 100% 100%"/>
     10    </sprite>
     11
     12    <sprite name="ForegroundBox">
     13        <image backcolor="255 255 255 40" size="0 0 100% 100%"/>
     14        <image backcolor="gold" size="0 0 2 100%"/>
     15        <image backcolor="gold" size="2 100%-2 100%-2 100%"/>
     16        <image backcolor="gold" size="100%-2 0 100% 100%"/>
     17        <image backcolor="gold" size="0 0 100% 100%"/>
     18    </sprite>
     19</sprites>
  • new file inaries/data/mods/public/gui/credits/styles.xml

    diff --git a/binaries/data/mods/public/gui/credits/styles.xml b/binaries/data/mods/public/gui/credits/styles.xml
    new file mode 100644
    index 0000000..a8d4be1
    - +  
     1<?xml version="1.0" encoding="utf-8"?>
     2
     3<styles>
     4
     5    <style name="textPanel"
     6        buffer_zone="8"
     7        scrollbar="true"
     8        scrollbar_style="ModernScrollBar"
     9        font="sans-bold-stroke-14"
     10        textcolor="white"
     11        text_align="center"
     12        text_valign="center"
     13        sprite="ModernDarkBoxGold"
     14    />
     15
     16</styles>
  • new file inaries/data/mods/public/gui/credits/texts/art.json

    diff --git a/binaries/data/mods/public/gui/credits/texts/art.json b/binaries/data/mods/public/gui/credits/texts/art.json
    new file mode 100644
    index 0000000..20761ad
    - +  
     1{
     2    "Content": [
     3    {
     4        "Title": "Artistic managers",
     5        "Content": [
     6        {
     7            "Subtitle": "Art lead",
     8            "List": [
     9                {"nick": "Wijitmaker", "name": "Jason Bishop"},
     10                {"nick": "Mythos_Ruler", "name": "Michael D. Hafer"},
     11                {"nick": "Enrique", "name": "Enrique Keykens"}
     12            ]
     13        },
     14        {
     15            "Subtitle": "Sound Manager",
     16            "List": [{"nick": "lostchocolatelab", "name": "Damian Kastbauer"}]
     17        },
     18        {
     19            "Subtitle": "Composer",
     20            "List": [{"nick": "OmriLahav", "name": "Omri Lahav"}]
     21        }
     22        ]
     23    },
     24    {
     25        "Title": "Mapping",
     26        "List": [
     27            {"nick": "Aeros (aka CheeZy)", "name": "Bobby Ognyanov"},           
     28            {"nick": "mmayfield45"},
     29            {"nick": "Mythos_Ruler", "name": "Michael D. Hafer"},
     30            {"nick": "niektb", "name": "Niek ten Brinke"},
     31            {"nick": "Pureon"},
     32            {"nick": "SMST"},           
     33            {"nick": "Yodaspirine"}
     34        ]
     35    },
     36    {
     37        "Title": "Random Map Scripts",
     38        "List": [
     39            {"nick": "Ben", "name": "Ben Vinegar"},
     40            {"nick": "FeXoR", "name": "Florian Finke"},
     41            {"nick": "howlingflute"},
     42            {"nick": "Spahbod", "name": "Omid Davoodi"},
     43            {"nick": "wraitii", "name": "Lancelot de Ferrière le Vayer"}
     44        ]
     45    },
     46    {
     47        "Title": "2D Art",
     48        "List": [
     49            {"nick": "Annatar", "name": "Kenneth Branch"},
     50            {"nick": "b.w.keough", "name": "Brendan Keough"},
     51            {"nick": "Brownboot", "name": "Allen White"},
     52            {"nick": "Centurion_13", "name": "Shan Coster"},
     53            {"nick": "Childhood Trauma", "name": "Praveen Pillai"},
     54            {"nick": "dashinvaine", "name": "Gordon Napier"},
     55            {"nick": "Dnas", "name": "David Benjamin"},
     56            {"nick": "Fire Giant", "name": "Malte Schwarzkopf"},
     57            {"nick": "Hyborian", "name": "Shan Sherrill"},
     58            {"nick": "irishstag", "name": "Ryan Karsten"},
     59            {"nick": "lanoocha", "name": "Lana"},
     60            {"nick": "Lion.Kanzen", "name": "Marcio Duron"},
     61            {"nick": "LordGood", "name": "Johnathan B. Good"},
     62            {"nick": "Mythos_Ruler", "name": "Michael D. Hafer"},
     63            {"nick": "Pureon"},
     64            {"nick": "raulfabi"},
     65            {"nick": "Scorpion Ra", "name": "Aaron Robinson"},
     66            {"nick": "Shield Bearer", "name": "Amish Coelho"},
     67            {"nick": "Wijitmaker", "name": "Jason Bishop"}
     68        ]
     69    },
     70    {
     71        "Title": "3D Art",
     72        "List": [
     73            {"nick": "Athos"},
     74            {"nick": "Brightgalrs", "name": "Robert D. Schultz"},
     75            {"nick": "Eggbird", "name": "Egbert Tigelaar"},
     76            {"nick": "EmjeR", "name": "Matthijs de Rijk"},
     77            {"nick": "Enrique", "name": "Enrique Keykens Espolio"},
     78            {"nick": "Historicity", "name": "Shane"},
     79            {"nick": "Gen.Kenobi", "name": "Daniel Schubert"},
     80            {"nick": "LordGood", "name": "Johnathan B. Good"},
     81            {"nick": "Micket", "name": ""},
     82            {"nick": "Mythos_Ruler", "name": "Michael D. Hafer"},
     83            {"nick": "Pacman", "name": "Johannes(John) Saarniit"},
     84            {"nick": "paperkat", "name": "William Pryn"},
     85            {"nick": "privateer", "name": "Jeff Groves"},
     86            {"nick": "Pureon"},
     87            {"nick": "Quacker", "name": "Jordan Quackenbush"},
     88            {"nick": "Saurabh", "name": "Saurabh Torne"},
     89            {"nick": "Scorpion Ra", "name": "Aaron Robinson"},
     90            {"nick": "Shield Bearer", "name": "Amish Coelho"},
     91            {"nick": "stanislas69", "name": "Stanislas Dolcini"},
     92            {"nick": "Strannik", "name": ""},
     93            {"nick": "Zaggy1024", "name": "Gregory Bertilson"},
     94            {"nick": "Wijitmaker", "name": "Jason Bishop"}
     95        ]
     96    },
     97    {
     98        "Title": "Sound",
     99        "List": [
     100            {"nick": "carsten", "name": "Carsten Rojahn"},
     101            {"nick": "dungeonsound615", "name": "Mike Stanton"},
     102            {"nick": "DynamiteSoundBytes", "name": "Nolan, Tony, and Lucas"},
     103            {"nick": "EvanBogunia", "name": "Evan Bogunia"},
     104            {"nick": "khegarty", "name": "Kaitlynn Hegarty"},
     105            {"nick": "LAVS"},
     106            {"nick": "lostchocolatelab", "name": "Damian Kastbauer"},
     107            {"nick": "MattSherman", "name": "Matt Sherman"},
     108            {"nick": "mclellandp", "name": "Pat Mclelland"},
     109            {"nick": "PhoenixDog", "name": "Shawn Anthony Poxleitner"},
     110            {"nick": "Pureon"},
     111            {"nick": "ryan827", "name": "Ryan Davies"},
     112            {"nick": "Sam Assoum", "name": "Sam Assoum"},
     113            {"nick": "Wyrmwood", "name": "Ron Lacy"}
     114        ]
     115    },
     116    {
     117        "Title": "Music",
     118        "List": [
     119            {"nick": "Dariusofwest", "name": "Allan Brown"},
     120            {"nick": "OmriLahav", "name": "Omri Lahav"},
     121            {"nick": "Vaevictis_Music", "name": "Boris Hansen"}
     122        ]
     123    }
     124    ]
     125}
  • new file inaries/data/mods/public/gui/credits/texts/donators.json

    diff --git a/binaries/data/mods/public/gui/credits/texts/donators.json b/binaries/data/mods/public/gui/credits/texts/donators.json
    new file mode 100644
    index 0000000..d027d2a
    - +  
     1{
     2    "Content" : [
     3    {
     4        "Title": "Pledgie Drive 1",
     5        "List": [
     6            {"name": "23 Anonymous Donators"},
     7            {"name": "@bcrunos"},
     8            {"name": "@CheDean"},
     9            {"name": "@joshhsoj1902"},
     10            {"name": "@kednar"},
     11            {"name": "@NtynRuben"},
     12            {"name": "@opengimox"},
     13            {"name": "@scotthosking"},
     14            {"name": "@takluyver"},
     15            {"name": "@TubeShaped"},
     16            {"name": "@unverbraucht"},
     17            {"name": "@upurtwee"},
     18            {"name": "@YannDinendal"},
     19            {"name": "Alain Imbaud"},
     20            {"name": "Alex McKee"},
     21            {"name": "Alexander Kallenbach"},
     22            {"name": "Alexander Opachev"},
     23            {"name": "Alexander Wagner"},
     24            {"name": "Alexey Sergin"},
     25            {"name": "Andreas Hopfenblatt"},
     26            {"name": "Andreas Hoppe"},
     27            {"name": "Brent Houghton"},
     28            {"name": "Bruno Sanchez-Huffenus"},
     29            {"name": "Carl Olsson"},
     30            {"name": "Cedric Heintz"},
     31            {"name": "Chad Merkert"},
     32            {"name": "Chad Peyton"},
     33            {"name": "Christopher Tozzi"},
     34            {"name": "Daniel Kuzmenko"},
     35            {"name": "Daniel Scharrer"},
     36            {"name": "danijelv"},
     37            {"name": "Darrel Greenhill"},
     38            {"name": "David Nielsen"},
     39            {"name": "David Raich"},
     40            {"name": "Duan Pavlík"},
     41            {"name": "Emil Nicolaie Perhinschi"},
     42            {"name": "Eric Winterling"},
     43            {"name": "Étienne Bersac"},
     44            {"name": "Evans Thomas"},
     45            {"name": "Fabio Erculiani"},
     46            {"name": "Felipe Torres González"},
     47            {"name": "Fernando Martins"},
     48            {"name": "Florian Ludwig"},
     49            {"name": "Fredrik Eliasson"},
     50            {"name": "Gabriel Diosan"},
     51            {"name": "Gustav Schumann"},
     52            {"name": "Ilya Makarov"},
     53            {"name": "inglorion"},
     54            {"name": "Jan Krautter"},
     55            {"name": "Javier Alfonso"},
     56            {"name": "Jií Jindra"},
     57            {"name": "Jill Bishop"},
     58            {"name": "Joakim Verona"},
     59            {"name": "Jonathan Pritchard"},
     60            {"name": "Jordan Taienao"},
     61            {"name": "Jorge Vega Sánchez"},
     62            {"name": "Juan Font Alonso"},
     63            {"name": "Kaare Baastrup"},
     64            {"name": "Kevin Faulkner"},
     65            {"name": "Kieran P"},
     66            {"name": "Klaas Waesberghe"},
     67            {"name": "Korneel Guns"},
     68            {"name": "Kristian Jagd"},
     69            {"name": "Krzysztof Duchnowski"},
     70            {"name": "Lasse Bigum"},
     71            {"name": "Laurent Thermy"},
     72            {"name": "lordofsoul"},
     73            {"name": "Lorenzo Angeli"},
     74            {"name": "Magne Djupvik"},
     75            {"name": "Maxime Fradi"},
     76            {"name": "Michael Stubbs"},
     77            {"name": "Mikhail Lunkovskiy"},
     78            {"name": "Neil Hancock"},
     79            {"name": "Olivier Bordignon"},
     80            {"name": "Olivier Coppin"},
     81            {"name": "Oskar Maxa"},
     82            {"name": "Panagiotis Tsakiris"},
     83            {"name": "Patrice Sopel"},
     84            {"name": "Paul Scott"},
     85            {"name": "Pedro Veloso"},
     86            {"name": "Séverin Lemaignan"},
     87            {"name": "Scott C Lemon"},
     88            {"name": "Shane Quigley"},
     89            {"name": "Stanislav Kíž"},
     90            {"name": "Steven Saric"},
     91            {"name": "Thomas Hummel"},
     92            {"name": "Thomas Mikkelsen"},
     93            {"name": "Timothy McLaren"},
     94            {"name": "Toni Helenius"},
     95            {"name": "Valeryan_24"},
     96            {"name": "Victor Lavaud"},
     97            {"name": "Viktor Novak"},
     98            {"name": "William Norris"}
     99        ]
     100    },
     101    {
     102        "Title": "Pledgie Drive 2",
     103        "List": [
     104            {"name": "87 Anonymous Donators"},
     105            {"name": "@AvivSharon"},
     106            {"name": "@mrfurieux"},
     107            {"name": "@sciondev"},
     108            {"name": "@upurtweet"},
     109            {"name": "@waytoubuntu"},
     110            {"name": "@YannDinendal"},
     111            {"name": "AkylaQD"},
     112            {"name": "Alexander Hunziker"},
     113            {"name": "Anthony Lenton"},
     114            {"name": "arakash"},
     115            {"name": "azkanel"},
     116            {"name": "Catalanoic"},
     117            {"name": "charlycoste"},
     118            {"name": "dadarek"},
     119            {"name": "David Callé"},
     120            {"name": "dbileck"},
     121            {"name": "Erik Johansson"},
     122            {"name": "Evans Thomas"},
     123            {"name": "fireprog"},
     124            {"name": "Foaly"},
     125            {"name": "Francisco Jesús Martínez Murcia"},
     126            {"name": "francofil66"},
     127            {"name": "Frederic Laliberte"},
     128            {"name": "Gabriel Ionescu"},
     129            {"name": "gheesh"},
     130            {"name": "harrytuttle"},
     131            {"name": "Hatsen"},
     132            {"name": "hyno111"},
     133            {"name": "Italo Gonzalez"},
     134            {"name": "Jaap Broekhuizen"},
     135            {"name": "jeykey"},
     136            {"name": "John2Ray"},
     137            {"name": "JuliusColtranePille"},
     138            {"name": "Jupiter Barrera"},
     139            {"name": "Kieran P"},
     140            {"name": "Kyle"},
     141            {"name": "letsyl"},
     142            {"name": "Ludovic Claude"},
     143            {"name": "Martin Albisetti"},
     144            {"name": "Matthew Frost"},
     145            {"name": "Matthew Gillespie"},
     146            {"name": "MCMic"},
     147            {"name": "mikeo"},
     148            {"name": "Mikhail Nedovodin"},
     149            {"name": "Nathanael Barbettini"},
     150            {"name": "orpharion"},
     151            {"name": "p2snico"},
     152            {"name": "Pablo Briones Bas"},
     153            {"name": "Paolo Frattini"},
     154            {"name": "ruano1983"},
     155            {"name": "samtuke"},
     156            {"name": "Strategist"},
     157            {"name": "tallanddaft"},
     158            {"name": "Tottel"},
     159            {"name": "Troels Arvin"},
     160            {"name": "Tungdil"},
     161            {"name": "VforVincent"},
     162            {"name": "Vladislav Gapchich"},
     163            {"name": "Yves *"}
     164        ]
     165    },
     166    {
     167        "Title": "IndieGoGO 2013 campaign\nMore than 1000 donators (!), including:",
     168        "List": [
     169            {"name": "1lightsource"},
     170            {"name": "@GuiAmbros"},
     171            {"name": "ACH_Likey"},
     172            {"name": "Adam Freeman"},
     173            {"name": "Adam Glickman"},
     174            {"name": "Adrián Chaves Fernández (Gallaecio)"},
     175            {"name": "Adrian Rocha"},
     176            {"name": "adventureloop"},
     177            {"name": "Agostino Sturaro"},
     178            {"name": "ahj"},
     179            {"name": "Akita Noek"},
     180            {"name": "Albert Astals Cid"},
     181            {"name": "Alec Gorge"},
     182            {"name": "Alessio Bolognini"},
     183            {"name": "Alex Brem"},
     184            {"name": "Alex Kapranoff"},
     185            {"name": "Alex Melville"},
     186            {"name": "Alex W."},
     187            {"name": "Alexander A. (cicyractu)"},
     188            {"name": "Alexandre Prokoudine"},
     189            {"name": "Alexey Kreshchuk"},
     190            {"name": "Alexey Vazhnov"},
     191            {"name": "Alice Marks"},
     192            {"name": "Alin Hanghiuc"},
     193            {"name": "Alister Galpin"},
     194            {"name": "Aljullu"},
     195            {"name": "Altwazar"},
     196            {"name": "Alun Lewis"},
     197            {"name": "aluriak"},
     198            {"name": "alxndr"},
     199            {"name": "Ana Vazquez Alonso"},
     200            {"name": "Anders Dahnielson"},
     201            {"name": "andersonvom"},
     202            {"name": "André Vitor de Lima Matos"},
     203            {"name": "Andrea Panontin"},
     204            {"name": "Andrew M. 'Leny' Lindley"},
     205            {"name": "Andrew Mike"},
     206            {"name": "Andrzej Kardas"},
     207            {"name": "Andy Allan"},
     208            {"name": "Anirudh Surendranath"},
     209            {"name": "Anthony J. Bentley"},
     210            {"name": "Anthony Ryan"},
     211            {"name": "Anton Gushcha"},
     212            {"name": "Antti Repo"},
     213            {"name": "April Lee"},
     214            {"name": "Ari Selseng"},
     215            {"name": "Armin Seuchter"},
     216            {"name": "Arnaud Gelly"},
     217            {"name": "Artem Kavalerov"},
     218            {"name": "AsavarTzeth"},
     219            {"name": "Athaniar Silverbranch"},
     220            {"name": "Atheox"},
     221            {"name": "Aurag"},
     222            {"name": "baosen"},
     223            {"name": "Bart Noordervliet"},
     224            {"name": "BCvery1"},
     225            {"name": "BelaB"},
     226            {"name": "Ben Golightly"},
     227            {"name": "Ben Kennedy"},
     228            {"name": "Ben-Jamin' Ziegelaar"},
     229            {"name": "Benjamin Geese"},
     230            {"name": "Benjamin Stauß"},
     231            {"name": "Bernhard M."},
     232            {"name": "Bert 'Cysion' Beeckman"},
     233            {"name": "Betsy Lipes"},
     234            {"name": "Bill O'Dwyer"},
     235            {"name": "Bobby Ognyanov"},
     236            {"name": "Boris Mindzak"},
     237            {"name": "Boris Niclas-Tölle"},
     238            {"name": "Boyd Stephen Smith Jr."},
     239            {"name": "Brian Aichlmayr"},
     240            {"name": "Brian Stempin"},
     241            {"name": "Brice Gressent"},
     242            {"name": "Bruno Girin"},
     243            {"name": "Cédric de Launois"},
     244            {"name": "c0l3slaw"},
     245            {"name": "Cajetan Bouchard"},
     246            {"name": "Calvin Rawlings"},
     247            {"name": "Carl Sebastian Malm"},
     248            {"name": "Cedric Bail"},
     249            {"name": "Chad Peyton"},
     250            {"name": "Chanakya"},
     251            {"name": "Charles E. Lehner"},
     252            {"name": "Che Dean"},
     253            {"name": "Chris Dickerson"},
     254            {"name": "Christian 'Roggan29' Budde"},
     255            {"name": "Christoffer 'cjva' Andersson"},
     256            {"name": "Christoffer Ingers"},
     257            {"name": "Christoph Zürcher"},
     258            {"name": "Christophe & Fabienne Hugon"},
     259            {"name": "Christopher Morrison"},
     260            {"name": "Chrysostomos Kolovos"},
     261            {"name": "clauskj3r"},
     262            {"name": "Cloei Bailey"},
     263            {"name": "Craig Millett"},
     264            {"name": "Cristiane Weber"},
     265            {"name": "cyrxi"},
     266            {"name": "Cyryl Plotnicki-Chudyk"},
     267            {"name": "D. Can Celasun"},
     268            {"name": "daJoe"},
     269            {"name": "Damiano Dallatana"},
     270            {"name": "Dan Seldow"},
     271            {"name": "Daniel Draeger"},
     272            {"name": "Daniel Melin"},
     273            {"name": "Daniel Spronk"},
     274            {"name": "Daniel Wee"},
     275            {"name": "Daniele Canciani (aka croma25td)"},
     276            {"name": "Daniil Bondarev"},
     277            {"name": "Daniil Kulchenko"},
     278            {"name": "Dave Peters"},
     279            {"name": "David Abilleira"},
     280            {"name": "David Ahmed"},
     281            {"name": "David Hayes"},
     282            {"name": "David Lawrence Evans"},
     283            {"name": "David Page"},
     284            {"name": "David Verelst"},
     285            {"name": "David Zschille"},
     286            {"name": "davyg"},
     287            {"name": "Debcool"},
     288            {"name": "Denis Fateyev"},
     289            {"name": "Dennis Blok"},
     290            {"name": "Desmond Talkington"},
     291            {"name": "devland"},
     292            {"name": "Diego Peinador"},
     293            {"name": "Dmitry Pashkevich"},
     294            {"name": "Doménique van Gennip"},
     295            {"name": "Dr Martin Gray"},
     296            {"name": "earendil02"},
     297            {"name": "Edgar Klenske"},
     298            {"name": "elel"},
     299            {"name": "Elias K Gardner"},
     300            {"name": "Emmanuel Florac"},
     301            {"name": "en3r0"},
     302            {"name": "Engry Baldwin"},
     303            {"name": "Erik J"},
     304            {"name": "Erin"},
     305            {"name": "Ernst Vaarties"},
     306            {"name": "Ethan Glasser-Camp"},
     307            {"name": "Evans Thomas"},
     308            {"name": "Fabio Pezzoni"},
     309            {"name": "Fedor Podolyako"},
     310            {"name": "Felix Schindler"},
     311            {"name": "Fidel Ramos"},
     312            {"name": "Flo S. MTP"},
     313            {"name": "Florian R. A. Angermeier"},
     314            {"name": "flowblok"},
     315            {"name": "Francis Brunelle"},
     316            {"name": "Fred G"},
     317            {"name": "Fred Schuit"},
     318            {"name": "Friedemann Leipold"},
     319            {"name": "Fringale"},
     320            {"name": "Gary Sparks"},
     321            {"name": "Georg R. Zufall"},
     322            {"name": "Gerol Petruzella"},
     323            {"name": "Gert van Valkenhoef"},
     324            {"name": "Glorforidor"},
     325            {"name": "Goosefraba"},
     326            {"name": "Gordon Macleod"},
     327            {"name": "Gudo"},
     328            {"name": "Guillaume Desjardins"},
     329            {"name": "Guillaume Englert"},
     330            {"name": "Guillaume GASNIER"},
     331            {"name": "Gustav 'Gego/XAREN' Hartvigsson"},
     332            {"name": "Gwilym Kuiper"},
     333            {"name": "Harry Burrows"},
     334            {"name": "Harshid Dattani"},
     335            {"name": "Harteex"},
     336            {"name": "Harvy"},
     337            {"name": "Honza Brázdil"},
     338            {"name": "Hunv"},
     339            {"name": "Iain Hallam"},
     340            {"name": "Ian Davis"},
     341            {"name": "Ian R. Bennett"},
     342            {"name": "Isaac Clerencia"},
     343            {"name": "itoshkov"},
     344            {"name": "Ján Nešcivera"},
     345            {"name": "Jacek"},
     346            {"name": "James Dearing"},
     347            {"name": "James Gregory"},
     348            {"name": "James Weeks (aka Chiptoxic)"},
     349            {"name": "Jamie"},
     350            {"name": "Jan Chochol"},
     351            {"name": "Jan-Tore Velle"},
     352            {"name": "Jarl Arntzen"},
     353            {"name": "Jason moofang"},
     354            {"name": "Jason Smith"},
     355            {"name": "Javier Cantero"},
     356            {"name": "JDSJ Hollandia"},
     357            {"name": "Jean-Baptiste CAMPESATO"},
     358            {"name": "Jeremy Rose"},
     359            {"name": "Jesse 'Magic' Johnson"},
     360            {"name": "jg1234"},
     361            {"name": "Jim Baxter"},
     362            {"name": "Jim Howard"},
     363            {"name": "Jimmy Turgeon"},
     364            {"name": "Jiri Stransky"},
     365            {"name": "Joe Johaneman"},
     366            {"name": "Joel A. Parisi"},
     367            {"name": "Joel Edberg"},
     368            {"name": "Joel Friedly"},
     369            {"name": "John Eikenberry"},
     370            {"name": "John Furcean"},
     371            {"name": "John Paden"},
     372            {"name": "John Tse"},
     373            {"name": "Jon Gjengset"},
     374            {"name": "Jonathan Biegert"},
     375            {"name": "Jonny McCullagh"},
     376            {"name": "Jordan White"},
     377            {"name": "Jose A. Rivera"},
     378            {"name": "Jose Lou Chang"},
     379            {"name": "Jose M Andion"},
     380            {"name": "Josef Pruša"},
     381            {"name": "Josepf Haslam"},
     382            {"name": "Joseph Livecchi"},
     383            {"name": "Joseph Thompson"},
     384            {"name": "Josh Gunderson"},
     385            {"name": "Julie Barton"},
     386            {"name": "Julius FreeGamer Blog"},
     387            {"name": "Justin James"},
     388            {"name": "K McFadden"},
     389            {"name": "Kaloyan Todorov"},
     390            {"name": "Kamereon"},
     391            {"name": "kepinpin"},
     392            {"name": "Kevin Krammer"},
     393            {"name": "Kevin W. Rodewald"},
     394            {"name": "kilobug"},
     395            {"name": "Kirkor"},
     396            {"name": "Konstantin Kitmanov"},
     397            {"name": "Kshitij Sobti"},
     398            {"name": "Kyle Leach"},
     399            {"name": "LarsHuluk"},
     400            {"name": "Lasse Bigum"},
     401            {"name": "Lasse Hynninen"},
     402            {"name": "Lauris BH"},
     403            {"name": "lbilloret"},
     404            {"name": "Lee Symes"},
     405            {"name": "lepiota"},
     406            {"name": "linux_eki"},
     407            {"name": "Liothe"},
     408            {"name": "liquidat"},
     409            {"name": "Lukas Daniel Klausner"},
     410            {"name": "Magne Djupvik"},
     411            {"name": "MaMuS"},
     412            {"name": "Marc Schneider-Woggon"},
     413            {"name": "Marcel de Jong"},
     414            {"name": "Marcel Stimberg"},
     415            {"name": "Marcus Liebhardt"},
     416            {"name": "Mardini"},
     417            {"name": "Marián Polták"},
     418            {"name": "Mark Lukens"},
     419            {"name": "Markus Enzenberger"},
     420            {"name": "Matías Guzmán Naranjo"},
     421            {"name": "Matei Zaharia"},
     422            {"name": "Matic Potocnik"},
     423            {"name": "Matt Brenner"},
     424            {"name": "Matt Williams"},
     425            {"name": "Max Polun"},
     426            {"name": "Max Tweddell"},
     427            {"name": "mecatxis"},
     428            {"name": "Michael Laporte"},
     429            {"name": "Michael McCafferty"},
     430            {"name": "Michael Patzer"},
     431            {"name": "Michael Vincent"},
     432            {"name": "Michal Sedlak"},
     433            {"name": "Michele Brami"},
     434            {"name": "Michele Olivo"},
     435            {"name": "Miguel Vera Leon"},
     436            {"name": "Mike Manfrin"},
     437            {"name": "Milo Radunski"},
     438            {"name": "Mindcloud"},
     439            {"name": "Mitchell Kember"},
     440            {"name": "MooseTheBrown"},
     441            {"name": "Nate 'Gnate' Sigrist"},
     442            {"name": "Nathan"},
     443            {"name": "Nathanael Barbettini"},
     444            {"name": "Nehar"},
     445            {"name": "Neil"},
     446            {"name": "Nelson Benitez Leon"},
     447            {"name": "Nic Thiele"},
     448            {"name": "Niklas Rosenqvist"},
     449            {"name": "nineinchnick"},
     450            {"name": "Noah Rusnock"},
     451            {"name": "Ohad Stolarz"},
     452            {"name": "ojdo"},
     453            {"name": "Ollie Lowson"},
     454            {"name": "Orwell"},
     455            {"name": "Osledy Bazo"},
     456            {"name": "Othman Almandhari"},
     457            {"name": "Ørjan Hoem"},
     458            {"name": "Pablo López (kednar)"},
     459            {"name": "Patrick Glanz"},
     460            {"name": "Patrick McDonough"},
     461            {"name": "Patrick Plenefisch"},
     462            {"name": "Paul Edward Tang"},
     463            {"name": "Paul Schorfheide"},
     464            {"name": "Paul4kant"},
     465            {"name": "Pavy"},
     466            {"name": "Peter Berg"},
     467            {"name": "Peter Davoust"},
     468            {"name": "Peter Ståhlberg"},
     469            {"name": "Phalgun Guduthur"},
     470            {"name": "Philip Tellis"},
     471            {"name": "Philipp Pilhofer"},
     472            {"name": "Pierce Lopez"},
     473            {"name": "Pierre 'Eunostos' Cuvelier"},
     474            {"name": "Pierre Donat-Bouillud"},
     475            {"name": "psq"},
     476            {"name": "Quarkslot"},
     477            {"name": "Randolph aka Shieldwolf"},
     478            {"name": "Rene Balser"},
     479            {"name": "Rob Crowther"},
     480            {"name": "Rob Parker"},
     481            {"name": "Rob Snelders"},
     482            {"name": "Robert Clark"},
     483            {"name": "Robert Hill, MD"},
     484            {"name": "Robert Walker"},
     485            {"name": "rocandante"},
     486            {"name": "Romain Naour"},
     487            {"name": "Ronald Delval"},
     488            {"name": "Rudolf J. Mueller"},
     489            {"name": "Rustan Håkansson"},
     490            {"name": "Sam Griffin"},
     491            {"name": "seaxx"},
     492            {"name": "Sebastian Spaeth"},
     493            {"name": "Sergey Kashin"},
     494            {"name": "Shaun McFall"},
     495            {"name": "sHINOBI"},
     496            {"name": "Shiv Manas"},
     497            {"name": "Shrink"},
     498            {"name": "Sigfrido"},
     499            {"name": "Simon Barnes"},
     500            {"name": "Simon Coe"},
     501            {"name": "Simon Wenner"},
     502            {"name": "Sinan Onur Altinuç"},
     503            {"name": "snorpey"},
     504            {"name": "Standa"},
     505            {"name": "Stepan Salenikovich"},
     506            {"name": "Stephan Spijkers"},
     507            {"name": "Stephan Tietz"},
     508            {"name": "Stephan Wiehr"},
     509            {"name": "Stephen Rule"},
     510            {"name": "Steven Fuchs"},
     511            {"name": "Stijn Debrouwere"},
     512            {"name": "Stokescomp"},
     513            {"name": "Sze Howe Koh"},
     514            {"name": "Tanel Mae"},
     515            {"name": "Tapio Hansson"},
     516            {"name": "Tassos Hourmouziadis"},
     517            {"name": "tbug"},
     518            {"name": "Theodore Brown"},
     519            {"name": "Thero Layfer"},
     520            {"name": "Thomas Glamsch"},
     521            {"name": "Thomas Penin"},
     522            {"name": "Thorbjørn Lindeijer"},
     523            {"name": "Tim Koschützki"},
     524            {"name": "TimseZ"},
     525            {"name": "TingPing"},
     526            {"name": "Titov Andrii"},
     527            {"name": "Toby"},
     528            {"name": "Toby Haynes"},
     529            {"name": "Tom C"},
     530            {"name": "tonyo112"},
     531            {"name": "toyotis"},
     532            {"name": "Tribalbeat"},
     533            {"name": "Tuhin Sheikh"},
     534            {"name": "Tyler Hall"},
     535            {"name": "UA"},
     536            {"name": "udan"},
     537            {"name": "Vadim Peretokin"},
     538            {"name": "Valentina Mukhamedzhanova"},
     539            {"name": "Vegar Guldal"},
     540            {"name": "vimja"},
     541            {"name": "Vit Pelcak"},
     542            {"name": "Vladimir Kalugin"},
     543            {"name": "Vladimir Lettiev"},
     544            {"name": "Volkmar Stein"},
     545            {"name": "waspinator"},
     546            {"name": "William Edwards"},
     547            {"name": "wisemonkey"},
     548            {"name": "XioNoX"},
     549            {"name": "Yigal Duppen"},
     550            {"name": "Yumi"},
     551            {"name": "Yury Vidineev"},
     552            {"name": "Yvonne R"},
     553            {"name": "Zach Reed"},
     554            {"name": "Zimes"},
     555            {"name": "ZyoxNet"}
     556        ]
     557    }
     558    ]
     559}
  • new file inaries/data/mods/public/gui/credits/texts/misc.json

    diff --git a/binaries/data/mods/public/gui/credits/texts/misc.json b/binaries/data/mods/public/gui/credits/texts/misc.json
    new file mode 100644
    index 0000000..7534f4e
    - +  
     1{
     2    "Content": [
     3    {
     4        "Title": "History References",
     5        "Content": [
     6        {
     7            "Subtitle": "Head",
     8            "List": [{"nick": "Shogun 144", "name": "Joshua Gilbert"}]
     9        },
     10        {
     11            "List": [
     12                {"nick": "fede_histpop", "name": "Federico Odorizzi"},
     13                {"nick": "I_Would_Say", "name": "Nathan Benjamin"},
     14                {"nick": "Paul", "name": "Paul Withers"},
     15                {"nick": "Paal_101", "name": "Paul Basar"},
     16                {"nick": "Saqqara", "name": "Ashley King"},
     17                {"nick": "Sting", "name": "Borislav Chernev"},
     18                {"nick": "Thorfinn the Shallow Minded", "name": ""}
     19            ]
     20        }
     21        ]
     22    },
     23    {
     24        "Title": "Community and Management",
     25        "List": [
     26            {"nick": "Black OP", "name": "Randy Sage"},
     27            {"nick": "bstempi", "name": "Brian Stempin"},
     28            {"nick": "chichigrande", "name": "Matthew Rogers"},
     29            {"nick": "CodeOptimist", "name": "Nathanael Barbettini"},
     30            {"nick": "DarkAngelBGE", "name": "Tim Koschuetzki"},
     31            {"nick": "darkfires (aka lethalhunter)", "name": "Jonathan Wright"},
     32            {"nick": "formlesstree4", "name": "Adam Sears"},
     33            {"nick": "gudo"},
     34            {"nick": "Jeru", "name": "Aviv Sharon"},
     35            {"nick": "jshores", "name": "Jason Shores"},
     36            {"nick": "Kimball", "name": "Rob Kimball"},
     37            {"nick": "King Tutankhamun", "name": "Desmond Talkington"},
     38            {"nick": "MishFTW", "name": "A. Mishra"},
     39            {"nick": "Morgan", "name": "Morgan Ramsay"},
     40            {"nick": "Red_08", "name": "Joshua Barker"},
     41            {"nick": "ricotz", "name": "Rico Tzschichholz"},
     42            {"nick": "Rodrigo", "name": "Klass Van Waesberghe"},
     43            {"nick": "Sam (aka Ph4ntom)", "name": "Sam Carlton"},
     44            {"nick": "Sunshine", "name": "Belle Green"},   
     45            {"nick": "Yiuel", "name": "Ugo Lachapelle"}
     46        ]
     47    }
     48    ]
     49}
     50 No newline at end of file
  • new file inaries/data/mods/public/gui/credits/texts/programming.json

    diff --git a/binaries/data/mods/public/gui/credits/texts/programming.json b/binaries/data/mods/public/gui/credits/texts/programming.json
    new file mode 100644
    index 0000000..a6539ce
    - +  
     1{
     2    "Content": [
     3    {
     4        "Title": "Programming managers",
     5        "List": [           
     6            {"nick": "Acumen", "name": "Stuart Walpole"},
     7            {"nick": "Dak Lozar", "name": "Dave Loeser"},
     8            {"nick": "h20", "name": "Daniel Wilhelm"},
     9            {"nick": "Janwas", "name": "Jan Wassenberg"},
     10            {"nick": "Raj", "name": "Raj Sharma"}
     11        ]
     12    },
     13    {
     14        "Subtitle": "Special thanks to",
     15        "List": [{"nick": "Ykkrosh", "name": "Philip Taylor"}]
     16    },
     17    {
     18        "List": [
     19            {"nick": "01d55", "name": ""},
     20            {"nick": "Acumen", "name": "Stuart Walpole"},
     21            {"name": "Adrian Fatol"},
     22            {"nick": "AI-Amsterdam"},
     23            {"nick": "Alan", "name": "Alan Kemp"},
     24            {"nick": "aBothe", "name": "Alexander Bothe"},
     25            {"nick": "alpha123", "name": "Peter P. Cannici"},
     26            {"nick": "Aurium", "name": "Aurélio Heckert"},
     27            {"nick": "badmadblacksad", "name": "Martin F"},
     28            {"nick": "Bajter", "name": ""},
     29            {"nick": "bb", "name": "Bouke Jansen"},
     30            {"nick": "Ben", "name": "Ben Vinegar"},
     31            {"nick": "Bird", "name": ""},
     32            {"nick": "Blue", "name": "Richard Welsh"},
     33            {"nick": "bmwiedemann", "name": ""},
     34            {"nick": "boeseRaupe", "name": "Michael Kluge"},
     35            {"nick": "bog_dan_ro", "name": "BogDan Vatra"},
     36            {"nick": "Bonk", "name": "Christopher Ebbert"},
     37            {"nick": "Caius", "name": "Lars Kemmann"},
     38            {"nick": "Calefaction", "name": "Matt Holmes"},
     39            {"nick": "Calvinh", "name": "Carl-Johan Höiby"},
     40            {"name": "Cédric Houbart"},
     41            {"nick": "Chakakhan", "name": "Kenny Long"},
     42            {"nick": "Cracker78", "name": "Chad Heim"},
     43            {"nick": "Crynux", "name": ""},
     44            {"nick": "cwprogger", "name": ""},
     45            {"nick": "Dak Lozar", "name": "Dave Loeser"},
     46            {"nick": "dan", "name": "Dan Strandberg"},
     47            {"name": "Daniel Trevitz"},
     48            {"nick": "DanCar", "name": ""},
     49            {"nick": "Dave", "name": "David Protasowski"},
     50            {"nick": "dax", "name": "Dacian Fiordean"},
     51            {"nick": "deebee", "name": "Deepak Anthony"},
     52            {"nick": "Deiz"},
     53            {"nick": "Dietger", "name": ""},
     54            {"nick": "dumbo"},
     55            {"nick": "dvangennip", "name": "Doménique"},
     56            {"nick": "Echelon9", "name": "Rhys Kidd"},
     57            {"nick": "eihrul", "name": "Lee Salzman"},
     58            {"nick": "elexis", "name": "Alexander Heinsius"},
     59            {"nick": "EmjeR", "name": "Matthijs de Rijk"},
     60            {"nick": "EMontana", "name": ""},
     61            {"nick": "ericb", "name": ""},
     62            {"nick": "evanssthomas", "name": "Evans Thomas"},
     63            {"nick": "Evulant", "name": "Alexander S."},
     64            {"nick": "falsevision", "name": ""},
     65            {"nick": "fcxSanya", "name": "Alexander Olkhovskiy"},
     66            {"nick": "FeXoR", "name": "Florian Finke"},
     67            {"nick": "Fire Giant", "name": "Malte Schwarzkopf"},
     68            {"nick": "freenity", "name": "Anton Galitch"},
     69            {"nick": "gbish (aka Iny)", "name": "Grant Bishop"},
     70            {"nick": "Gee", "name": "Gustav Larsson"},
     71            {"nick": "gerbilOFdoom"},
     72            {"nick": "godlikeldh", "name": ""},
     73            {"nick": "greybeard", "name": "Joe Cocovich"},
     74            {"nick": "grillaz", "name": ""},
     75            {"nick": "gudo"},
     76            {"name": "Samuel Guarnieri"},
     77            {"nick": "Haommin", "name": ""},
     78            {"nick": "h20", "name": "Daniel Wilhelm"},
     79            {"nick": "historic_bruno", "name": "Ben Brian"},
     80            {"nick": "idanwin", "name": ""},
     81            {"nick": "infyquest", "name": "Vijay Kiran Kamuju"},
     82            {"nick": "IronNerd", "name": ""},
     83            {"nick": "Itms", "name": "Nicolas Auvray"},
     84            {"nick": "Jaison", "name": "Marco tom Suden"},
     85            {"nick": "jammus", "name": ""},
     86            {"nick": "Jgwman", "name": ""},
     87            {"nick": "Josh", "name": "Joshua J. Bakita"},
     88            {"nick": "jP_wanN", "name": "Jonas Platte"},
     89            {"nick": "Jubalbarca", "name": "James Baillie"},
     90            {"nick": "JubJub", "name": "Sebastian Vetter"},
     91            {"nick": "kabzerek", "name": ""},
     92            {"nick": "Kai", "name": "Kai Chen"},
     93            {"nick": "KareemErgawy", "name": ""},
     94            {"nick": "kevmo", "name": "Kevin Caffrey"},
     95            {"nick": "kezz", "name": "Graeme Kerry"},
     96            {"nick": "kingadami", "name": ""},
     97            {"nick": "kingbasil", "name": ""},
     98            {"nick": "lafferjm", "name": ""},
     99            {"nick": "leper", "name": "Georg Kilzer"},
     100            {"nick": "livingaftermidnight", "name": "Will Dull"},
     101            {"nick": "Louhike", "name": ""},
     102            {"nick": "lsdh", "name": ""},
     103            {"nick": "madmax"},
     104            {"nick": "m0l0t0ph", "name": "Christoph Gielisch"},
     105            {"nick": "markcho", "name": ""},
     106            {"nick": "MarkT", "name": "Mark Thompson"},
     107            {"nick": "Markus", "name": ""},
     108            {"nick": "Matei", "name": "Matei Zaharia"},
     109            {"nick": "MattDoerksen", "name": "Matt Doerksen"},
     110            {"nick": "mattlott", "name": "Matt Lott"},
     111            {"nick": "maveric", "name": ""},
     112            {"nick": "Micnasty", "name": "Travis Gorkin"},
     113            {"nick": "mimo"},
     114            {"nick": "mk12", "name": "Mitchell Kember"},
     115            {"nick": "Molotov", "name": "Dario Alvarez"},
     116            {"nick": "mpmoreti", "name": ""},
     117            {"nick": "mreiland", "name": "Michael Reiland"},
     118            {"nick": "myconid"},
     119            {"nick": "nd3c3nt", "name": "Gavin Fowler"},
     120            {"nick": "necro", "name": ""},
     121            {"nick": "niektb", "name": "Niek ten Brinke"},
     122            {"nick": "njm", "name": ""},
     123            {"nick": "NoMonkey", "name": "John Mena"},
     124            {"nick": "notpete", "name": "Rich Cross"},
     125            {"nick": "Ols", "name": "Oliver Whiteman"},
     126            {"nick": "olsner", "name": "Simon Brenner"},
     127            {"nick": "otero", "name": ""},
     128            {"name": "Nick Owens"},
     129            {"nick": "Palaxin", "name": "David A. Freitag"},
     130            {"nick": "pcpa", "name": ""},
     131            {"nick": "PendingChaos", "name": ""},
     132            {"nick": "PeteVasi", "name": "Pete Vasiliauskas"},
     133            {"nick": "Polakrity", "name": ""},
     134            {"nick": "Poya", "name": "Poya Manouchehri"},
     135            {"name": "Quentin Pradet"},
     136            {"nick": "prefect", "name": "Nicolai Hähnle"},
     137            {"nick": "pstumpf", "name": ""},
     138            {"name": "André Puel"},
     139            {"nick": "Prodigal Son", "name": ""},
     140            {"nick": "pyrolink", "name": "Andrew Decker"},
     141            {"nick": "quantumstate", "name": "Jonathan Waller"},
     142            {"nick": "QuickShot", "name": "Walter Krawec"},
     143            {"nick": "quonter", "name": ""},
     144            {"nick": "qwertz", "name": ""},
     145            {"nick": "Radagast"},
     146            {"nick": "Raj", "name": "Raj Sharma"},
     147            {"nick": "RedFox", "name": "Jorma Rebane"},
     148            {"nick": "RefinedCode", "name": ""},
     149            {"nick": "Riemer", "name": ""},
     150            {"name": "Rolf Sievers"},
     151            {"nick": "s0600204", "name": "Matthew Norwood"},
     152            {"nick": "SafaAlfulaij"},
     153            {"nick": "sanderd17", "name": "Sander Deryckere"},
     154            {"nick": "sathyam", "name": "Sathyam Vellal"},
     155            {"nick": "sbte", "name": ""},
     156            {"nick": "scroogie", "name": "André Gemünd"},
     157            {"nick": "scythetwirler", "name": "Casey X."},
     158            {"nick": "serveurix"},
     159            {"nick": "Shane", "name": ""},
     160            {"nick": "Silk", "name": ""},
     161            {"nick": "silure", "name": ""},
     162            {"nick": "Simikolon", "name": "Yannick & Simon"},
     163            {"nick": "Spahbod", "name": "Omid Davoodi"},
     164            {"nick": "stanislas69", "name": "Stanislas Dolcini"},
     165            {"nick": "Stefan", "name": ""},
     166            {"nick": "stilz", "name": ""},
     167            {"nick": "stwf", "name": "Steven Fuchs"},
     168            {"nick": "t4nk004", "name": ""},
     169            {"nick": "tbm", "name": ""},
     170            {"nick": "tau"},
     171            {"nick": "Teiresias"},
     172            {"nick": "thamlett", "name": "Timothy Hamlett"},
     173            {"nick": "thedrunkyak", "name": "Dan Fuhr"},
     174            {"nick": "TrinityDeath", "name": "Jethro Lu"},
     175            {"nick": "triumvir", "name": "Corin Schedler"},
     176            {"nick": "trompetin17", "name": "Juan Guillermo"},
     177            {"nick": "vladislavbelov", "name": "Vladislav Belov"},
     178            {"nick": "vts", "name": "Jeroen DR"},
     179            {"nick": "WhiteTreePaladin", "name": "Brian Ashley"},
     180            {"nick": "wraitii", "name": "Lancelot de Ferrière le Vayer"},
     181            {"nick": "Xentelian", "name": "Mark Strawson"},
     182            {"nick": "Xienen", "name": "Dayle Flowers"},
     183            {"nick": "xtizer", "name": "Matt Green"},
     184            {"nick": "yashi", "name": ""},
     185            {"nick": "Ykkrosh", "name": "Philip Taylor"},
     186            {"nick": "Yves"},
     187            {"nick": "Zeusthor", "name": "Jeffrey Tavares"},
     188            {"nick": "zoot"},
     189            {"nick": "zsol", "name": ""},
     190            {"nick": "Zyi", "name": "Charles De Meulenaer"}
     191        ]
     192    }
     193    ]
     194}
  • new file inaries/data/mods/public/gui/credits/texts/special.json

    diff --git a/binaries/data/mods/public/gui/credits/texts/special.json b/binaries/data/mods/public/gui/credits/texts/special.json
    new file mode 100644
    index 0000000..b06ec3f
    - +  
     1{
     2    "Content": [
     3    {
     4        "Title": "In Memoriam",
     5        "List": [
     6            {"nick": "Phoenix-TheRealDeal", "name": "Ken Wood"},
     7            {"nick": "Dak Lozar", "name": "Dave Loeser"}
     8        ]
     9    },
     10    {
     11        "Title": "Special thanks to:",
     12        "Content": [
     13        {
     14            "Subtitle": "0 A.D. Founder",
     15            "List": [{"nick": "Wijitmaker", "name": "Jason Bishop"}]
     16        },
     17        {
     18            "Subtitle": "Project Leaders",
     19            "List": [
     20                {"nick": "feneur", "name": "Erik Johansson"},
     21                {"nick": "Mythos_Ruler", "name": "Michael D. Hafer"}
     22            ]
     23        },
     24        {
     25            "Subtitle": "Co-Lead Designers",
     26            "List": [
     27                {"nick": "Phoenix-TheRealDeal", "name": "Ken Wood"},
     28                {"nick": "Acumen", "name": "Stuart Walpole"}
     29            ]
     30        }
     31        ]
     32    },
     33    {
     34        "Title": "And thanks to the entire community for making 0 A.D. possible."
     35    },
     36    {
     37        "Title": "No historians were harmed during the development of this project."
     38    }
     39    ]
     40}
  • new file inaries/data/mods/public/gui/credits/texts/translators.json

    diff --git a/binaries/data/mods/public/gui/credits/texts/translators.json b/binaries/data/mods/public/gui/credits/texts/translators.json
    new file mode 100644
    index 0000000..26ba46e
    - +  
     1{
     2    "Content": [
     3    ]
     4}
     5 No newline at end of file
  • new file inaries/data/mods/public/gui/page_credits.xml

    diff --git a/binaries/data/mods/public/gui/page_credits.xml b/binaries/data/mods/public/gui/page_credits.xml
    new file mode 100644
    index 0000000..83628e7
    - +  
     1<?xml version="1.0" encoding="utf-8"?>
     2<page>
     3    <include>common/modern/setup.xml</include>
     4    <include>common/modern/styles.xml</include>
     5    <include>common/modern/sprites.xml</include>
     6
     7    <include>common/global.xml</include>
     8
     9    <include>credits/styles.xml</include>
     10    <include>credits/sprites.xml</include>
     11    <include>credits/credits.xml</include>
     12</page>
  • binaries/data/mods/public/gui/pregame/mainmenu.xml

    diff --git a/binaries/data/mods/public/gui/pregame/mainmenu.xml b/binaries/data/mods/public/gui/pregame/mainmenu.xml
    index d2089d3..cd1917f 100644
    a b  
    535535                        <translate>Alpha XIX: Syllepsis</translate>
    536536                        <keep>[/font]\n\n</keep>
    537537                        <translate>WARNING: This is an early development version of the game. Many features have not been added yet.</translate>
    538                         <keep>\n\n</keep>
    539                         <translate>Get involved at: play0ad.com</translate>
    540538                    </attribute>
    541539                </object>
    542540
    543                 <!-- CONTACT METHODS -->
     541                <!-- GET INVOLVED -->
    544542                <object type="button"
    545543                    style="StoneButton"
    546544                    tooltip_style="pgToolTip"
    547                     size="8 100%-108 100%-8 100%-80"
    548                 >
    549                     <translatableAttribute id="caption">Help with the Translation!</translatableAttribute>
    550                     <translatableAttribute id="tooltip">Click to open the 0 A.D. translate page in your browser.</translatableAttribute>
    551                     <action on="Press"><![CDATA[
    552                         openURL("http://trac.wildfiregames.com/wiki/Localization");
    553                     ]]></action>
    554                 </object>
    555 
    556                 <object type="button"
    557                     style="StoneButton"
    558                     tooltip_style="pgToolTip"
    559                     size="8 100%-72 50%-4 100%-44"
     545                    size="8 100%-144 50%-4 100%-116"
    560546                >
    561547                    <translatableAttribute id="caption">Website</translatableAttribute>
    562548                    <translatableAttribute id="tooltip">Click to open play0ad.com in your web browser.</translatableAttribute>
     
    568554                <object type="button"
    569555                    style="StoneButton"
    570556                    tooltip_style="pgToolTip"
    571                     size="50%+4 100%-72 100%-8 100%-44"
     557                    size="50%+4 100%-144 100%-8 100%-116"
    572558                >
    573559                    <translatableAttribute id="caption">Chat</translatableAttribute>
    574560                    <translatableAttribute id="tooltip">Click to open the 0 A.D. IRC chat in your browser. (#0ad on webchat.quakenet.org)</translatableAttribute>
     
    580566                <object type="button"
    581567                    style="StoneButton"
    582568                    tooltip_style="pgToolTip"
    583                     size="8 100%-36 100%-8 100%-8"
     569                    size="8 100%-108 100%-8 100%-80"
    584570                >
    585571                    <translatableAttribute id="caption">Report a Bug</translatableAttribute>
    586572                    <translatableAttribute id="tooltip">Click to visit 0 A.D. Trac to report a bug, crash, or error.</translatableAttribute>
     
    589575                    ]]></action>
    590576                </object>
    591577
     578                <object type="button"
     579                    style="StoneButton"
     580                    tooltip_style="pgToolTip"
     581                    size="8 100%-72 100%-8 100%-44"
     582                >
     583                    <translatableAttribute id="caption">Translate the game</translatableAttribute>
     584                    <translatableAttribute id="tooltip">Click to open the 0 A.D. translate page in your browser.</translatableAttribute>
     585                    <action on="Press"><![CDATA[
     586                        openURL("http://trac.wildfiregames.com/wiki/Localization");
     587                    ]]></action>
     588                </object>
     589
     590                <object type="button"
     591                    style="StoneButton"
     592                    tooltip_style="pgToolTip"
     593                    size="8 100%-36 100%-8 100%-8"
     594                >
     595                    <translatableAttribute id="caption">Credits</translatableAttribute>
     596                    <translatableAttribute id="tooltip">Click to see the 0 A.D. credits.</translatableAttribute>
     597                    <action on="Press">
     598                        Engine.PushGuiPage("page_credits.xml", {});
     599                    </action>
     600                </object>
     601
    592602            </object>
    593603
    594604            <!-- LOGO AND BUILD VERSION -->
  • deleted file binaries/data/mods/public/gui/text/credits.txt

    diff --git a/binaries/data/mods/public/gui/text/credits.txt b/binaries/data/mods/public/gui/text/credits.txt
    deleted file mode 100644
    index d5e369e..0000000
    + -  
    1 
    2 
    3 
    4 
    5 
    6 
    7 
    8 
    9 
    10 
    11 
    12 
    13 
    14 
    15 
    16 
    17 
    18 
    19 
    20 
    21 
    22 
    23 
    24 
    25 
    26 
    27 
    28 
    29 
    30 
    31 
    32 
    33 
    34 
    35 
    36 
    37 
    38 
    39 
    40 
    41 
    42 
    43 
    44 
    45 
    46 "0 A.D."
    47 
    48 Cast of Characters
    49 Dude #768           Minion #392
    50 Dude #162           Minion #864
    51 Dude #794           Minion #894
    52 Dude #765           Minion #896
    53 Dude #668           Minion #331
    54 Dude #748           Minion #892
    55 Dude #963           Minion #870
    56 Dude #564           Minion #321
    57 Dude #731           Minion #891
    58 Polly Gonne         Dudette
    59 
    60 and introducing
    61 Roastin' Staff Rooster      as himself
    62 
    63 No historians were harmed during the development of this project.
    64 
    65 © 2002-2007 Wildfire Games. All rights reserved.
    66 
    67 This product is intended solely for private home use.  Public performance or other use is expressly prohibited.
    68  No newline at end of file
  • binaries/data/mods/public/l10n/messages.json

    diff --git a/binaries/data/mods/public/l10n/messages.json b/binaries/data/mods/public/l10n/messages.json
    index d1e43ad..07535af 100644
    a b  
    236236                    "globalscripts/**.js",
    237237                    "gui/civinfo/**.js",
    238238                    "gui/common/**.js",
     239                    "gui/credits/**.js",
    239240                    "gui/locale/**.js",
    240241                    "gui/msgbox/**.js",
    241242                    "gui/options/**.js",
     
    268269                    "globalscripts/**.xml",
    269270                    "gui/civinfo/**.xml",
    270271                    "gui/common/**.xml",
     272                    "gui/credits/**.xml",
    271273                    "gui/locale/**.xml",
    272274                    "gui/msgbox/**.xml",
    273275                    "gui/options/**.xml",
     
    287289                    }
    288290                }
    289291            },
     292            {
     293                "extractor": "json",
     294                "filemasks": [
     295                    "gui/credits/texts/**.json"
     296                ],
     297                "options": {
     298                    "keywords": [
     299                        "Title",
     300                        "Subtitle",
     301                    ]
     302                }
     303            },
    290304            {
    291305                "extractor": "txt",
    292306                "filemasks": [
  • new file source/tools/i18n/creditTranslators.py

    diff --git a/source/tools/i18n/creditTranslators.py b/source/tools/i18n/creditTranslators.py
    new file mode 100644
    index 0000000..767f4b3
    - +  
     1#!/usr/bin/env python2
     2# -*- coding:utf-8 -*-
     3#
     4# Copyright (C) 2016 Wildfire Games.
     5# This file is part of 0 A.D.
     6#
     7# 0 A.D. is free software: you can redistribute it and/or modify
     8# it under the terms of the GNU General Public License as published by
     9# the Free Software Foundation, either version 2 of the License, or
     10# (at your option) any later version.
     11#
     12# 0 A.D. is distributed in the hope that it will be useful,
     13# but WITHOUT ANY WARRANTY; without even the implied warranty of
     14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15# GNU General Public License for more details.
     16#
     17# You should have received a copy of the GNU General Public License
     18# along with 0 A.D.  If not, see <http://www.gnu.org/licenses/>.
     19
     20"""
     21This file imports the translators credits located in the public mod GUI files and
     22runs through .po files to add possible new translators to it.
     23It only appends new people, so it is possible to manually add names in the credits
     24file and they won't be overwitten by running this script.
     25
     26Translatable strings will be extracted from the generated file, so this should be ran
     27before updateTemplates.py.
     28"""
     29
     30from __future__ import absolute_import, division, print_function, unicode_literals
     31
     32import json, os, glob, re
     33
     34# Credited languages - Keep in sync with source/tools/dist/remove-incomplete-translations.sh
     35langs = {
     36    'cs': 'Czech',
     37    'de': 'German',
     38    'en_GB': 'English (UK)',
     39    'es': 'Spanish',
     40    'fr': 'French',
     41    'gd': 'Gaelic',
     42    'gl': 'Galician',
     43    'id': 'Indonesian',
     44    'it': 'Italian',
     45    'nl': 'Dutch',
     46    'pl': 'Polish',
     47    'pt_PT': 'Portuguese (Portugal)',
     48    'pt_BR': 'Portuguese (Brazil)',
     49    'ru': 'Russian',
     50    'sk': 'Slovak',
     51    'tr': 'Turkish'}
     52
     53root = '../../../'
     54
     55poLocations = [
     56    'binaries/data/l10n/',
     57    'binaries/data/mods/public/l10n/',
     58    'binaries/data/mods/mod/l10n/']
     59
     60creditsLocation = 'binaries/data/mods/public/gui/credits/texts/translators.json'
     61
     62# Load JSON data
     63creditsFile = open(root + creditsLocation)
     64JSONData = json.load(creditsFile)
     65creditsFile.close()
     66
     67# This dictionnary will hold creditors lists for each language, indexed by code
     68langsLists = {}
     69
     70# Create the new JSON data
     71newJSONData = {'Content': []}
     72
     73# First get the already existing lists. If they correspond with some of the credited languages,
     74# add them to the new data after processing, else add them immediately.
     75# NB: All of this is quite inefficient
     76for element in JSONData['Content']:
     77    if 'Title' not in element or element['Title'] not in langs.values():
     78        newJSONData['Content'].append(element)
     79        continue
     80
     81    for (langCode, langName) in langs.items():
     82        if element['Title'] == langName:
     83            langsLists[langCode] = element['List']
     84            break
     85
     86# Now actually go through the list of languages and search the .po files for people
     87
     88# Prepare some regexes
     89commentMatch = re.compile('#.*')
     90translatorMatch = re.compile('# ([\w\s]*)(?: <.*>)?, [0-9-]', re.UNICODE)
     91
     92# Search
     93for lang in langs.keys():
     94    if lang not in langsLists.keys():
     95        langsLists[lang] = []
     96
     97    for location in poLocations:
     98        files = glob.glob(root + location + lang + '.*.po')
     99        for file in files:
     100            poFile = open(file.replace('\\', '/'))
     101            reached = False
     102            for line in poFile:
     103                line = line.decode('utf8')
     104                if reached:
     105                    if not commentMatch.match(line):
     106                        break
     107                    m = translatorMatch.match(line)
     108                    if m:
     109                        langsLists[lang].append(m.group(1))
     110                if line.strip() == '# Translators:':
     111                    reached = True
     112            poFile.close()
     113
     114    # Sort and remove duplicates
     115    # Sorting should ignore case to have a neat credits list
     116    langsLists[lang] = sorted(set(langsLists[lang]), cmp=lambda x,y: cmp(x.lower(), y.lower()))
     117
     118# Now insert the new data into the new JSON file
     119for (langCode, langList) in sorted(langsLists.items()):
     120    newJSONData['Content'].append({'Title': langs[langCode], 'List': []})
     121    for name in langList:
     122        newJSONData['Content'][-1]['List'].append({'name': name})
     123
     124# Save the JSON data to the credits file
     125creditsFile = open(root + creditsLocation, 'w')
     126json.dump(newJSONData, creditsFile, indent=4)
     127creditsFile.close()