1
0
forked from 0ad/0ad

New in-game Credits page, fixes #3744.

This was SVN commit r17830.
This commit is contained in:
Nicolas Auvray 2016-03-05 11:52:08 +00:00
parent 1504115c14
commit bcf2c75513
14 changed files with 1336 additions and 85 deletions

View File

@ -0,0 +1,74 @@
var g_PanelNames = ["special", "programming", "art", "translators", "misc", "donators"];
var g_PanelTexts = [];
var g_ActivePanel = -1;
function init()
{
// Load credits list from the disk and parse them
for (let name of g_PanelNames)
g_PanelTexts.push(parseJSONCredits(name));
selectPanel(0);
}
// Run through a "Content" list and parse elements for formatting and translation
function parseHelper(list)
{
let result = "";
for (let object of list)
{
if (object.Title)
result += "[font=\"sans-bold-stroke-14\"]" + translate(object.Title) + "\n";
if (object.Subtitle)
result += "[font=\"sans-bold-14\"]" + translate(object.Subtitle) + "\n";
if (object.List)
{
for (let element of object.List)
{
if (element.nick && element.name)
result += "[font=\"sans-14\"]" + sprintf(translate("%(nick)s - %(name)s"), { "nick": element.nick, "name": element.name }) + "\n";
else if (element.nick)
result += "[font=\"sans-14\"]" + element.nick + "\n";
else if (element.name)
result += "[font=\"sans-14\"]" + element.name + "\n";
}
result += "\n";
}
if (object.Content)
result += "\n" + parseHelper(object.Content) + "\n";
}
return result;
}
function parseJSONCredits(panelName)
{
let json = Engine.ReadJSONFile("gui/credits/texts/" + panelName + ".json");
if (!json || !json.Content)
{
error("Could not load credits for " + panelName + "!");
return "";
}
return parseHelper(json.Content);
}
function selectPanel(i)
{
if (g_ActivePanel != -1)
{
let oldPanelButton = Engine.GetGUIObjectByName(g_PanelNames[g_ActivePanel] + "PanelButton");
oldPanelButton.sprite = "BackgroundBox";
}
g_ActivePanel = i;
let newPanelButton = Engine.GetGUIObjectByName(g_PanelNames[g_ActivePanel] + "PanelButton");
newPanelButton.sprite = "ForegroundBox";
let creditsText = Engine.GetGUIObjectByName("creditsText");
creditsText.caption = g_PanelTexts[i];
}

View File

@ -0,0 +1,75 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
==========================================
- CREDITS PAGE -
==========================================
-->
<objects>
<script file="gui/common/functions_global_object.js"/>
<script file="gui/credits/credits.js"/>
<!-- Add a translucent black background to fade out the menu page -->
<object type="image" z="0" sprite="ModernFade"/>
<object type="image" style="ModernDialog" size="50%-473 24 50%+473 100%-24">
<object style="ModernLabelText" type="text" size="50%-128 -18 50%+128 14">
<translatableAttribute id="caption">0 A.D. Credits</translatableAttribute>
</object>
<object name="specialPanelButton" type="button" sprite="BackgroundBox" size="20 50 150 80">
<action on="Press">selectPanel(0);</action>
<object type="text" style="ModernLabelText" ghost="true">
<translatableAttribute id="caption">Special Credits</translatableAttribute>
</object>
</object>
<object name="programmingPanelButton" type="button" sprite="BackgroundBox" size="155 50 305 80">
<action on="Press">selectPanel(1);</action>
<object type="text" style="ModernLabelText" ghost="true">
<translatableAttribute id="caption">Programming</translatableAttribute>
</object>
</object>
<object name="artPanelButton" type="button" sprite="BackgroundBox" size="310 50 460 80">
<action on="Press">selectPanel(2);</action>
<object type="text" style="ModernLabelText" ghost="true">
<translatableAttribute id="caption">Art</translatableAttribute>
</object>
</object>
<object name="translatorsPanelButton" type="button" sprite="BackgroundBox" size="465 50 615 80">
<action on="Press">selectPanel(3);</action>
<object type="text" style="ModernLabelText" ghost="true">
<translatableAttribute id="caption">Translators</translatableAttribute>
</object>
</object>
<object name="miscPanelButton" type="button" sprite="BackgroundBox" size="620 50 770 80">
<action on="Press">selectPanel(4);</action>
<object type="text" style="ModernLabelText" ghost="true">
<translatableAttribute id="caption">Miscellaneous</translatableAttribute>
</object>
</object>
<object name="donatorsPanelButton" type="button" sprite="BackgroundBox" size="775 50 925 80">
<action on="Press">selectPanel(5);</action>
<object type="text" style="ModernLabelText" ghost="true">
<translatableAttribute id="caption">Donators</translatableAttribute>
</object>
</object>
<object type="image" sprite="ModernFade" size="20 85 100%-20 100%-54">
<object name="creditsText" type="text" style="textPanel"/>
</object>
<!-- Close dialog -->
<object type="button" style="ModernButtonRed" size="100%-200 100%-45 100%-17 100%-17" hotkey="cancel">
<translatableAttribute id="caption">Close</translatableAttribute>
<action on="Press">
Engine.SwitchGuiPage("page_pregame.xml");
</action>
</object>
</object>
</objects>

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<sprites>
<sprite name="BackgroundBox">
<image backcolor="50 35 0 120" size="0 0 100% 100%"/>
<image backcolor="gold" size="0 0 1 100%"/>
<image backcolor="gold" size="1 0 100%-1 1"/>
<image backcolor="gold" size="100%-1 0 100% 100%"/>
<image backcolor="gold" size="0 100%-1 100% 100%"/>
</sprite>
<sprite name="ForegroundBox">
<image backcolor="255 255 255 40" size="0 0 100% 100%"/>
<image backcolor="gold" size="0 0 2 100%"/>
<image backcolor="gold" size="2 100%-2 100%-2 100%"/>
<image backcolor="gold" size="100%-2 0 100% 100%"/>
<image backcolor="gold" size="0 0 100% 100%"/>
</sprite>
</sprites>

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<styles>
<style name="textPanel"
buffer_zone="8"
scrollbar="true"
scrollbar_style="ModernScrollBar"
font="sans-bold-stroke-14"
textcolor="white"
text_align="center"
text_valign="center"
sprite="ModernDarkBoxGold"
/>
</styles>

View File

@ -0,0 +1,126 @@
{
"Content": [
{
"Title": "Artistic managers",
"Content": [
{
"Subtitle": "Art lead",
"List": [
{"nick": "Wijitmaker", "name": "Jason Bishop"},
{"nick": "Mythos_Ruler", "name": "Michael D. Hafer"},
{"nick": "Enrique", "name": "Enrique Keykens"}
]
},
{
"Subtitle": "Sound Manager",
"List": [{"nick": "lostchocolatelab", "name": "Damian Kastbauer"}]
},
{
"Subtitle": "Composer",
"List": [{"nick": "OmriLahav", "name": "Omri Lahav"}]
}
]
},
{
"Title": "Mapping",
"List": [
{"nick": "Aeros (aka CheeZy)", "name": "Bobby Ognyanov"},
{"nick": "mmayfield45"},
{"nick": "Mythos_Ruler", "name": "Michael D. Hafer"},
{"nick": "niektb", "name": "Niek ten Brinke"},
{"nick": "Pureon"},
{"nick": "SMST"},
{"nick": "Yodaspirine"}
]
},
{
"Title": "Random Map Scripts",
"List": [
{"nick": "Ben", "name": "Ben Vinegar"},
{"nick": "FeXoR", "name": "Florian Finke"},
{"nick": "howlingflute"},
{"nick": "Spahbod", "name": "Omid Davoodi"},
{"nick": "wraitii", "name": "Lancelot de Ferrière le Vayer"}
]
},
{
"Title": "2D Art",
"List": [
{"nick": "Annatar", "name": "Kenneth Branch"},
{"nick": "b.w.keough", "name": "Brendan Keough"},
{"nick": "Brownboot", "name": "Allen White"},
{"nick": "Centurion_13", "name": "Shan Coster"},
{"nick": "Childhood Trauma", "name": "Praveen Pillai"},
{"nick": "dashinvaine", "name": "Gordon Napier"},
{"nick": "Dnas", "name": "David Benjamin"},
{"nick": "Fire Giant", "name": "Malte Schwarzkopf"},
{"nick": "Hyborian", "name": "Shan Sherrill"},
{"nick": "irishstag", "name": "Ryan Karsten"},
{"nick": "lanoocha", "name": "Lana"},
{"nick": "Lion.Kanzen", "name": "Marcio Duron"},
{"nick": "LordGood", "name": "Johnathan B. Good"},
{"nick": "Mythos_Ruler", "name": "Michael D. Hafer"},
{"nick": "Pureon"},
{"nick": "raulfabi"},
{"nick": "Scorpion Ra", "name": "Aaron Robinson"},
{"nick": "Shield Bearer", "name": "Amish Coelho"},
{"nick": "Wijitmaker", "name": "Jason Bishop"}
]
},
{
"Title": "3D Art",
"List": [
{"nick": "Athos"},
{"nick": "Brightgalrs", "name": "Robert D. Schultz"},
{"nick": "Eggbird", "name": "Egbert Tigelaar"},
{"nick": "EmjeR", "name": "Matthijs de Rijk"},
{"nick": "Enrique", "name": "Enrique Keykens Espolio"},
{"nick": "Historicity", "name": "Shane"},
{"nick": "Gen.Kenobi", "name": "Daniel Schubert"},
{"nick": "LordGood", "name": "Johnathan B. Good"},
{"nick": "Micket"},
{"nick": "Mythos_Ruler", "name": "Michael D. Hafer"},
{"nick": "necro", "name": "Thomas Eichler"},
{"nick": "Pacman", "name": "Johannes(John) Saarniit"},
{"nick": "paperkat", "name": "William Pryn"},
{"nick": "privateer", "name": "Jeff Groves"},
{"nick": "Pureon"},
{"nick": "Quacker", "name": "Jordan Quackenbush"},
{"nick": "Saurabh", "name": "Saurabh Torne"},
{"nick": "Scorpion Ra", "name": "Aaron Robinson"},
{"nick": "Shield Bearer", "name": "Amish Coelho"},
{"nick": "stanislas69", "name": "Stanislas Dolcini"},
{"nick": "Strannik"},
{"nick": "Zaggy1024", "name": "Gregory Bertilson"},
{"nick": "Wijitmaker", "name": "Jason Bishop"}
]
},
{
"Title": "Sound",
"List": [
{"nick": "carsten", "name": "Carsten Rojahn"},
{"nick": "dungeonsound615", "name": "Mike Stanton"},
{"nick": "DynamiteSoundBytes", "name": "Nolan, Tony, and Lucas"},
{"nick": "EvanBogunia", "name": "Evan Bogunia"},
{"nick": "khegarty", "name": "Kaitlynn Hegarty"},
{"nick": "LAVS"},
{"nick": "lostchocolatelab", "name": "Damian Kastbauer"},
{"nick": "MattSherman", "name": "Matt Sherman"},
{"nick": "mclellandp", "name": "Pat Mclelland"},
{"nick": "PhoenixDog", "name": "Shawn Anthony Poxleitner"},
{"nick": "Pureon"},
{"nick": "ryan827", "name": "Ryan Davies"},
{"nick": "Sam Assoum", "name": "Sam Assoum"},
{"nick": "Wyrmwood", "name": "Ron Lacy"}
]
},
{
"Title": "Music",
"List": [
{"nick": "Dariusofwest", "name": "Allan Brown"},
{"nick": "OmriLahav", "name": "Omri Lahav"},
{"nick": "Vaevictis_Music", "name": "Boris Hansen"}
]
}
]
}

View File

@ -0,0 +1,559 @@
{
"Content" : [
{
"Title": "Pledgie Drive 1",
"List": [
{"name": "23 Anonymous Donators"},
{"name": "@bcrunos"},
{"name": "@CheDean"},
{"name": "@joshhsoj1902"},
{"name": "@kednar"},
{"name": "@NtynRuben"},
{"name": "@opengimox"},
{"name": "@scotthosking"},
{"name": "@takluyver"},
{"name": "@TubeShaped"},
{"name": "@unverbraucht"},
{"name": "@upurtwee"},
{"name": "@YannDinendal"},
{"name": "Alain Imbaud"},
{"name": "Alex McKee"},
{"name": "Alexander Kallenbach"},
{"name": "Alexander Opachev"},
{"name": "Alexander Wagner"},
{"name": "Alexey Sergin"},
{"name": "Andreas Hopfenblatt"},
{"name": "Andreas Hoppe"},
{"name": "Brent Houghton"},
{"name": "Bruno Sanchez-Huffenus"},
{"name": "Carl Olsson"},
{"name": "Cedric Heintz"},
{"name": "Chad Merkert"},
{"name": "Chad Peyton"},
{"name": "Christopher Tozzi"},
{"name": "Daniel Kuzmenko"},
{"name": "Daniel Scharrer"},
{"name": "danijelv"},
{"name": "Darrel Greenhill"},
{"name": "David Nielsen"},
{"name": "David Raich"},
{"name": "Duan Pavlík"},
{"name": "Emil Nicolaie Perhinschi"},
{"name": "Eric Winterling"},
{"name": "Étienne Bersac"},
{"name": "Evans Thomas"},
{"name": "Fabio Erculiani"},
{"name": "Felipe Torres González"},
{"name": "Fernando Martins"},
{"name": "Florian Ludwig"},
{"name": "Fredrik Eliasson"},
{"name": "Gabriel Diosan"},
{"name": "Gustav Schumann"},
{"name": "Ilya Makarov"},
{"name": "inglorion"},
{"name": "Jan Krautter"},
{"name": "Javier Alfonso"},
{"name": "Jií Jindra"},
{"name": "Jill Bishop"},
{"name": "Joakim Verona"},
{"name": "Jonathan Pritchard"},
{"name": "Jordan Taienao"},
{"name": "Jorge Vega Sánchez"},
{"name": "Juan Font Alonso"},
{"name": "Kaare Baastrup"},
{"name": "Kevin Faulkner"},
{"name": "Kieran P"},
{"name": "Klaas Waesberghe"},
{"name": "Korneel Guns"},
{"name": "Kristian Jagd"},
{"name": "Krzysztof Duchnowski"},
{"name": "Lasse Bigum"},
{"name": "Laurent Thermy"},
{"name": "lordofsoul"},
{"name": "Lorenzo Angeli"},
{"name": "Magne Djupvik"},
{"name": "Maxime Fradi"},
{"name": "Michael Stubbs"},
{"name": "Mikhail Lunkovskiy"},
{"name": "Neil Hancock"},
{"name": "Olivier Bordignon"},
{"name": "Olivier Coppin"},
{"name": "Oskar Maxa"},
{"name": "Panagiotis Tsakiris"},
{"name": "Patrice Sopel"},
{"name": "Paul Scott"},
{"name": "Pedro Veloso"},
{"name": "Séverin Lemaignan"},
{"name": "Scott C Lemon"},
{"name": "Shane Quigley"},
{"name": "Stanislav Kíž"},
{"name": "Steven Saric"},
{"name": "Thomas Hummel"},
{"name": "Thomas Mikkelsen"},
{"name": "Timothy McLaren"},
{"name": "Toni Helenius"},
{"name": "Valeryan_24"},
{"name": "Victor Lavaud"},
{"name": "Viktor Novak"},
{"name": "William Norris"}
]
},
{
"Title": "Pledgie Drive 2",
"List": [
{"name": "87 Anonymous Donators"},
{"name": "@AvivSharon"},
{"name": "@mrfurieux"},
{"name": "@sciondev"},
{"name": "@upurtweet"},
{"name": "@waytoubuntu"},
{"name": "@YannDinendal"},
{"name": "AkylaQD"},
{"name": "Alexander Hunziker"},
{"name": "Anthony Lenton"},
{"name": "arakash"},
{"name": "azkanel"},
{"name": "Catalanoic"},
{"name": "charlycoste"},
{"name": "dadarek"},
{"name": "David Callé"},
{"name": "dbileck"},
{"name": "Erik Johansson"},
{"name": "Evans Thomas"},
{"name": "fireprog"},
{"name": "Foaly"},
{"name": "Francisco Jesús Martínez Murcia"},
{"name": "francofil66"},
{"name": "Frederic Laliberte"},
{"name": "Gabriel Ionescu"},
{"name": "gheesh"},
{"name": "harrytuttle"},
{"name": "Hatsen"},
{"name": "hyno111"},
{"name": "Italo Gonzalez"},
{"name": "Jaap Broekhuizen"},
{"name": "jeykey"},
{"name": "John2Ray"},
{"name": "JuliusColtranePille"},
{"name": "Jupiter Barrera"},
{"name": "Kieran P"},
{"name": "Kyle"},
{"name": "letsyl"},
{"name": "Ludovic Claude"},
{"name": "Martin Albisetti"},
{"name": "Matthew Frost"},
{"name": "Matthew Gillespie"},
{"name": "MCMic"},
{"name": "mikeo"},
{"name": "Mikhail Nedovodin"},
{"name": "Nathanael Barbettini"},
{"name": "orpharion"},
{"name": "p2snico"},
{"name": "Pablo Briones Bas"},
{"name": "Paolo Frattini"},
{"name": "ruano1983"},
{"name": "samtuke"},
{"name": "Strategist"},
{"name": "tallanddaft"},
{"name": "Tottel"},
{"name": "Troels Arvin"},
{"name": "Tungdil"},
{"name": "VforVincent"},
{"name": "Vladislav Gapchich"},
{"name": "Yves *"}
]
},
{
"Title": "IndieGoGO 2013 campaign\nMore than 1000 donators (!), including:",
"List": [
{"name": "1lightsource"},
{"name": "@GuiAmbros"},
{"name": "ACH_Likey"},
{"name": "Adam Freeman"},
{"name": "Adam Glickman"},
{"name": "Adrián Chaves Fernández (Gallaecio)"},
{"name": "Adrian Rocha"},
{"name": "adventureloop"},
{"name": "Agostino Sturaro"},
{"name": "ahj"},
{"name": "Akita Noek"},
{"name": "Albert Astals Cid"},
{"name": "Alec Gorge"},
{"name": "Alessio Bolognini"},
{"name": "Alex Brem"},
{"name": "Alex Kapranoff"},
{"name": "Alex Melville"},
{"name": "Alex W."},
{"name": "Alexander A. (cicyractu)"},
{"name": "Alexandre Prokoudine"},
{"name": "Alexey Kreshchuk"},
{"name": "Alexey Vazhnov"},
{"name": "Alice Marks"},
{"name": "Alin Hanghiuc"},
{"name": "Alister Galpin"},
{"name": "Aljullu"},
{"name": "Altwazar"},
{"name": "Alun Lewis"},
{"name": "aluriak"},
{"name": "alxndr"},
{"name": "Ana Vazquez Alonso"},
{"name": "Anders Dahnielson"},
{"name": "andersonvom"},
{"name": "André Vitor de Lima Matos"},
{"name": "Andrea Panontin"},
{"name": "Andrew M. 'Leny' Lindley"},
{"name": "Andrew Mike"},
{"name": "Andrzej Kardas"},
{"name": "Andy Allan"},
{"name": "Anirudh Surendranath"},
{"name": "Anthony J. Bentley"},
{"name": "Anthony Ryan"},
{"name": "Anton Gushcha"},
{"name": "Antti Repo"},
{"name": "April Lee"},
{"name": "Ari Selseng"},
{"name": "Armin Seuchter"},
{"name": "Arnaud Gelly"},
{"name": "Artem Kavalerov"},
{"name": "AsavarTzeth"},
{"name": "Athaniar Silverbranch"},
{"name": "Atheox"},
{"name": "Aurag"},
{"name": "baosen"},
{"name": "Bart Noordervliet"},
{"name": "BCvery1"},
{"name": "BelaB"},
{"name": "Ben Golightly"},
{"name": "Ben Kennedy"},
{"name": "Ben-Jamin' Ziegelaar"},
{"name": "Benjamin Geese"},
{"name": "Benjamin Stauß"},
{"name": "Bernhard M."},
{"name": "Bert 'Cysion' Beeckman"},
{"name": "Betsy Lipes"},
{"name": "Bill O'Dwyer"},
{"name": "Bobby Ognyanov"},
{"name": "Boris Mindzak"},
{"name": "Boris Niclas-Tölle"},
{"name": "Boyd Stephen Smith Jr."},
{"name": "Brian Aichlmayr"},
{"name": "Brian Stempin"},
{"name": "Brice Gressent"},
{"name": "Bruno Girin"},
{"name": "Cédric de Launois"},
{"name": "c0l3slaw"},
{"name": "Cajetan Bouchard"},
{"name": "Calvin Rawlings"},
{"name": "Carl Sebastian Malm"},
{"name": "Cedric Bail"},
{"name": "Chad Peyton"},
{"name": "Chanakya"},
{"name": "Charles E. Lehner"},
{"name": "Che Dean"},
{"name": "Chris Dickerson"},
{"name": "Christian 'Roggan29' Budde"},
{"name": "Christoffer 'cjva' Andersson"},
{"name": "Christoffer Ingers"},
{"name": "Christoph Zürcher"},
{"name": "Christophe & Fabienne Hugon"},
{"name": "Christopher Morrison"},
{"name": "Chrysostomos Kolovos"},
{"name": "clauskj3r"},
{"name": "Cloei Bailey"},
{"name": "Craig Millett"},
{"name": "Cristiane Weber"},
{"name": "cyrxi"},
{"name": "Cyryl Plotnicki-Chudyk"},
{"name": "D. Can Celasun"},
{"name": "daJoe"},
{"name": "Damiano Dallatana"},
{"name": "Dan Seldow"},
{"name": "Daniel Draeger"},
{"name": "Daniel Melin"},
{"name": "Daniel Spronk"},
{"name": "Daniel Wee"},
{"name": "Daniele Canciani (aka croma25td)"},
{"name": "Daniil Bondarev"},
{"name": "Daniil Kulchenko"},
{"name": "Dave Peters"},
{"name": "David Abilleira"},
{"name": "David Ahmed"},
{"name": "David Hayes"},
{"name": "David Lawrence Evans"},
{"name": "David Page"},
{"name": "David Verelst"},
{"name": "David Zschille"},
{"name": "davyg"},
{"name": "Debcool"},
{"name": "Denis Fateyev"},
{"name": "Dennis Blok"},
{"name": "Desmond Talkington"},
{"name": "devland"},
{"name": "Diego Peinador"},
{"name": "Dmitry Pashkevich"},
{"name": "Doménique van Gennip"},
{"name": "Dr Martin Gray"},
{"name": "earendil02"},
{"name": "Edgar Klenske"},
{"name": "elel"},
{"name": "Elias K Gardner"},
{"name": "Emmanuel Florac"},
{"name": "en3r0"},
{"name": "Engry Baldwin"},
{"name": "Erik J"},
{"name": "Erin"},
{"name": "Ernst Vaarties"},
{"name": "Ethan Glasser-Camp"},
{"name": "Evans Thomas"},
{"name": "Fabio Pezzoni"},
{"name": "Fedor Podolyako"},
{"name": "Felix Schindler"},
{"name": "Fidel Ramos"},
{"name": "Flo S. MTP"},
{"name": "Florian R. A. Angermeier"},
{"name": "flowblok"},
{"name": "Francis Brunelle"},
{"name": "Fred G"},
{"name": "Fred Schuit"},
{"name": "Friedemann Leipold"},
{"name": "Fringale"},
{"name": "Gary Sparks"},
{"name": "Georg R. Zufall"},
{"name": "Gerol Petruzella"},
{"name": "Gert van Valkenhoef"},
{"name": "Glorforidor"},
{"name": "Goosefraba"},
{"name": "Gordon Macleod"},
{"name": "Gudo"},
{"name": "Guillaume Desjardins"},
{"name": "Guillaume Englert"},
{"name": "Guillaume GASNIER"},
{"name": "Gustav 'Gego/XAREN' Hartvigsson"},
{"name": "Gwilym Kuiper"},
{"name": "Harry Burrows"},
{"name": "Harshid Dattani"},
{"name": "Harteex"},
{"name": "Harvy"},
{"name": "Honza Brázdil"},
{"name": "Hunv"},
{"name": "Iain Hallam"},
{"name": "Ian Davis"},
{"name": "Ian R. Bennett"},
{"name": "Isaac Clerencia"},
{"name": "itoshkov"},
{"name": "Ján Nešcivera"},
{"name": "Jacek"},
{"name": "James Dearing"},
{"name": "James Gregory"},
{"name": "James Weeks (aka Chiptoxic)"},
{"name": "Jamie"},
{"name": "Jan Chochol"},
{"name": "Jan-Tore Velle"},
{"name": "Jarl Arntzen"},
{"name": "Jason moofang"},
{"name": "Jason Smith"},
{"name": "Javier Cantero"},
{"name": "JDSJ Hollandia"},
{"name": "Jean-Baptiste CAMPESATO"},
{"name": "Jeremy Rose"},
{"name": "Jesse 'Magic' Johnson"},
{"name": "jg1234"},
{"name": "Jim Baxter"},
{"name": "Jim Howard"},
{"name": "Jimmy Turgeon"},
{"name": "Jiri Stransky"},
{"name": "Joe Johaneman"},
{"name": "Joel A. Parisi"},
{"name": "Joel Edberg"},
{"name": "Joel Friedly"},
{"name": "John Eikenberry"},
{"name": "John Furcean"},
{"name": "John Paden"},
{"name": "John Tse"},
{"name": "Jon Gjengset"},
{"name": "Jonathan Biegert"},
{"name": "Jonny McCullagh"},
{"name": "Jordan White"},
{"name": "Jose A. Rivera"},
{"name": "Jose Lou Chang"},
{"name": "Jose M Andion"},
{"name": "Josef Pruša"},
{"name": "Josepf Haslam"},
{"name": "Joseph Livecchi"},
{"name": "Joseph Thompson"},
{"name": "Josh Gunderson"},
{"name": "Julie Barton"},
{"name": "Julius FreeGamer Blog"},
{"name": "Justin James"},
{"name": "K McFadden"},
{"name": "Kaloyan Todorov"},
{"name": "Kamereon"},
{"name": "kepinpin"},
{"name": "Kevin Krammer"},
{"name": "Kevin W. Rodewald"},
{"name": "kilobug"},
{"name": "Kirkor"},
{"name": "Konstantin Kitmanov"},
{"name": "Kshitij Sobti"},
{"name": "Kyle Leach"},
{"name": "LarsHuluk"},
{"name": "Lasse Bigum"},
{"name": "Lasse Hynninen"},
{"name": "Lauris BH"},
{"name": "lbilloret"},
{"name": "Lee Symes"},
{"name": "lepiota"},
{"name": "linux_eki"},
{"name": "Liothe"},
{"name": "liquidat"},
{"name": "Lukas Daniel Klausner"},
{"name": "Magne Djupvik"},
{"name": "MaMuS"},
{"name": "Marc Schneider-Woggon"},
{"name": "Marcel de Jong"},
{"name": "Marcel Stimberg"},
{"name": "Marcus Liebhardt"},
{"name": "Mardini"},
{"name": "Marián Polták"},
{"name": "Mark Lukens"},
{"name": "Markus Enzenberger"},
{"name": "Matías Guzmán Naranjo"},
{"name": "Matei Zaharia"},
{"name": "Matic Potocnik"},
{"name": "Matt Brenner"},
{"name": "Matt Williams"},
{"name": "Max Polun"},
{"name": "Max Tweddell"},
{"name": "mecatxis"},
{"name": "Michael Laporte"},
{"name": "Michael McCafferty"},
{"name": "Michael Patzer"},
{"name": "Michael Vincent"},
{"name": "Michal Sedlak"},
{"name": "Michele Brami"},
{"name": "Michele Olivo"},
{"name": "Miguel Vera Leon"},
{"name": "Mike Manfrin"},
{"name": "Milo Radunski"},
{"name": "Mindcloud"},
{"name": "Mitchell Kember"},
{"name": "MooseTheBrown"},
{"name": "Nate 'Gnate' Sigrist"},
{"name": "Nathan"},
{"name": "Nathanael Barbettini"},
{"name": "Nehar"},
{"name": "Neil"},
{"name": "Nelson Benitez Leon"},
{"name": "Nic Thiele"},
{"name": "Niklas Rosenqvist"},
{"name": "nineinchnick"},
{"name": "Noah Rusnock"},
{"name": "Ohad Stolarz"},
{"name": "ojdo"},
{"name": "Ollie Lowson"},
{"name": "Orwell"},
{"name": "Osledy Bazo"},
{"name": "Othman Almandhari"},
{"name": "Ørjan Hoem"},
{"name": "Pablo López (kednar)"},
{"name": "Patrick Glanz"},
{"name": "Patrick McDonough"},
{"name": "Patrick Plenefisch"},
{"name": "Paul Edward Tang"},
{"name": "Paul Schorfheide"},
{"name": "Paul4kant"},
{"name": "Pavy"},
{"name": "Peter Berg"},
{"name": "Peter Davoust"},
{"name": "Peter Ståhlberg"},
{"name": "Phalgun Guduthur"},
{"name": "Philip Tellis"},
{"name": "Philipp Pilhofer"},
{"name": "Pierce Lopez"},
{"name": "Pierre 'Eunostos' Cuvelier"},
{"name": "Pierre Donat-Bouillud"},
{"name": "psq"},
{"name": "Quarkslot"},
{"name": "Randolph aka Shieldwolf"},
{"name": "Rene Balser"},
{"name": "Rob Crowther"},
{"name": "Rob Parker"},
{"name": "Rob Snelders"},
{"name": "Robert Clark"},
{"name": "Robert Hill, MD"},
{"name": "Robert Walker"},
{"name": "rocandante"},
{"name": "Romain Naour"},
{"name": "Ronald Delval"},
{"name": "Rudolf J. Mueller"},
{"name": "Rustan Håkansson"},
{"name": "Sam Griffin"},
{"name": "seaxx"},
{"name": "Sebastian Spaeth"},
{"name": "Sergey Kashin"},
{"name": "Shaun McFall"},
{"name": "sHINOBI"},
{"name": "Shiv Manas"},
{"name": "Shrink"},
{"name": "Sigfrido"},
{"name": "Simon Barnes"},
{"name": "Simon Coe"},
{"name": "Simon Wenner"},
{"name": "Sinan Onur Altinuç"},
{"name": "snorpey"},
{"name": "Standa"},
{"name": "Stepan Salenikovich"},
{"name": "Stephan Spijkers"},
{"name": "Stephan Tietz"},
{"name": "Stephan Wiehr"},
{"name": "Stephen Rule"},
{"name": "Steven Fuchs"},
{"name": "Stijn Debrouwere"},
{"name": "Stokescomp"},
{"name": "Sze Howe Koh"},
{"name": "Tanel Mae"},
{"name": "Tapio Hansson"},
{"name": "Tassos Hourmouziadis"},
{"name": "tbug"},
{"name": "Theodore Brown"},
{"name": "Thero Layfer"},
{"name": "Thomas Glamsch"},
{"name": "Thomas Penin"},
{"name": "Thorbjørn Lindeijer"},
{"name": "Tim Koschützki"},
{"name": "TimseZ"},
{"name": "TingPing"},
{"name": "Titov Andrii"},
{"name": "Toby"},
{"name": "Toby Haynes"},
{"name": "Tom C"},
{"name": "tonyo112"},
{"name": "toyotis"},
{"name": "Tribalbeat"},
{"name": "Tuhin Sheikh"},
{"name": "Tyler Hall"},
{"name": "UA"},
{"name": "udan"},
{"name": "Vadim Peretokin"},
{"name": "Valentina Mukhamedzhanova"},
{"name": "Vegar Guldal"},
{"name": "vimja"},
{"name": "Vit Pelcak"},
{"name": "Vladimir Kalugin"},
{"name": "Vladimir Lettiev"},
{"name": "Volkmar Stein"},
{"name": "waspinator"},
{"name": "William Edwards"},
{"name": "wisemonkey"},
{"name": "XioNoX"},
{"name": "Yigal Duppen"},
{"name": "Yumi"},
{"name": "Yury Vidineev"},
{"name": "Yvonne R"},
{"name": "Zach Reed"},
{"name": "Zimes"},
{"name": "ZyoxNet"}
]
}
]
}

View File

@ -0,0 +1,51 @@
{
"Content": [
{
"Title": "History References",
"Content": [
{
"Subtitle": "Head",
"List": [{"nick": "Shogun 144", "name": "Joshua Gilbert"}]
},
{
"List": [
{"nick": "fede_histpop", "name": "Federico Odorizzi"},
{"nick": "I_Would_Say", "name": "Nathan Benjamin"},
{"nick": "Paul", "name": "Paul Withers"},
{"nick": "Paal_101", "name": "Paul Basar"},
{"nick": "Saqqara", "name": "Ashley King"},
{"nick": "Sting", "name": "Borislav Chernev"},
{"nick": "Thorfinn the Shallow Minded"}
]
}
]
},
{
"Title": "Community and Management",
"List": [
{"nick": "Black OP", "name": "Randy Sage"},
{"nick": "bstempi", "name": "Brian Stempin"},
{"nick": "chichigrande", "name": "Matthew Rogers"},
{"nick": "CodeOptimist", "name": "Nathanael Barbettini"},
{"name": "Danny Reese"},
{"nick": "DarkAngelBGE", "name": "Tim Koschuetzki"},
{"nick": "darkfires (aka lethalhunter)", "name": "Jonathan Wright"},
{"nick": "fabio", "name": "Fabio Pedretti"},
{"nick": "formlesstree4", "name": "Adam Sears"},
{"nick": "gudo"},
{"nick": "Jeru", "name": "Aviv Sharon"},
{"nick": "jshores", "name": "Jason Shores"},
{"nick": "Kimball", "name": "Rob Kimball"},
{"nick": "King Tutankhamun", "name": "Desmond Talkington"},
{"nick": "MishFTW", "name": "A. Mishra"},
{"nick": "Morgan", "name": "Morgan Ramsay"},
{"nick": "Red_08", "name": "Joshua Barker"},
{"nick": "ricotz", "name": "Rico Tzschichholz"},
{"nick": "Rodrigo", "name": "Klass Van Waesberghe"},
{"nick": "Sam (aka Ph4ntom)", "name": "Sam Carlton"},
{"nick": "Sunshine", "name": "Belle Green"},
{"nick": "Yiuel", "name": "Ugo Lachapelle"}
]
}
]
}

View File

@ -0,0 +1,195 @@
{
"Content": [
{
"Title": "Programming managers",
"List": [
{"nick": "Acumen", "name": "Stuart Walpole"},
{"nick": "Dak Lozar", "name": "Dave Loeser"},
{"nick": "h20", "name": "Daniel Wilhelm"},
{"nick": "Janwas", "name": "Jan Wassenberg"},
{"nick": "Raj", "name": "Raj Sharma"}
]
},
{
"Subtitle": "Special thanks to",
"List": [{"nick": "Ykkrosh", "name": "Philip Taylor"}]
},
{
"List": [
{"nick": "01d55"},
{"nick": "Acumen", "name": "Stuart Walpole"},
{"name": "Adrian Fatol"},
{"nick": "AI-Amsterdam"},
{"nick": "Alan", "name": "Alan Kemp"},
{"nick": "aBothe", "name": "Alexander Bothe"},
{"nick": "alpha123", "name": "Peter P. Cannici"},
{"nick": "Aurium", "name": "Aurélio Heckert"},
{"nick": "badmadblacksad", "name": "Martin F"},
{"name": "Mikołaj \"Bajter\" Korcz"},
{"nick": "bb", "name": "Bouke Jansen"},
{"nick": "Ben", "name": "Ben Vinegar"},
{"nick": "Bird"},
{"nick": "Blue", "name": "Richard Welsh"},
{"nick": "bmwiedemann"},
{"nick": "boeseRaupe", "name": "Michael Kluge"},
{"nick": "bog_dan_ro", "name": "BogDan Vatra"},
{"nick": "Bonk", "name": "Christopher Ebbert"},
{"nick": "Caius", "name": "Lars Kemmann"},
{"nick": "Calefaction", "name": "Matt Holmes"},
{"nick": "Calvinh", "name": "Carl-Johan Höiby"},
{"name": "Cédric Houbart"},
{"nick": "Chakakhan", "name": "Kenny Long"},
{"nick": "Cracker78", "name": "Chad Heim"},
{"nick": "Crynux", "name": "Stephen J. Fewer"},
{"nick": "cwprogger"},
{"nick": "Dak Lozar", "name": "Dave Loeser"},
{"nick": "dan", "name": "Dan Strandberg"},
{"name": "Daniel Trevitz"},
{"nick": "DanCar", "name": "Daniel Cardenas"},
{"nick": "Dave", "name": "David Protasowski"},
{"nick": "dax", "name": "Dacian Fiordean"},
{"nick": "deebee", "name": "Deepak Anthony"},
{"nick": "Deiz"},
{"nick": "Dietger", "name": "Dietger van Antwerpen"},
{"nick": "dumbo"},
{"nick": "dvangennip", "name": "Doménique"},
{"nick": "Echelon9", "name": "Rhys Kidd"},
{"nick": "eihrul", "name": "Lee Salzman"},
{"nick": "elexis", "name": "Alexander Heinsius"},
{"nick": "EmjeR", "name": "Matthijs de Rijk"},
{"nick": "EMontana"},
{"nick": "ericb"},
{"nick": "evanssthomas", "name": "Evans Thomas"},
{"nick": "Evulant", "name": "Alexander S."},
{"nick": "fabio", "name": "Fabio Pedretti"},
{"nick": "falsevision", "name": "Mahdi Khodadadifard"},
{"nick": "fcxSanya", "name": "Alexander Olkhovskiy"},
{"nick": "FeXoR", "name": "Florian Finke"},
{"nick": "Fire Giant", "name": "Malte Schwarzkopf"},
{"nick": "freenity", "name": "Anton Galitch"},
{"nick": "gbish (aka Iny)", "name": "Grant Bishop"},
{"nick": "Gee", "name": "Gustav Larsson"},
{"nick": "gerbilOFdoom"},
{"nick": "godlikeldh"},
{"nick": "greybeard", "name": "Joe Cocovich"},
{"nick": "grillaz"},
{"nick": "gudo"},
{"name": "Samuel Guarnieri"},
{"nick": "Haommin"},
{"nick": "h20", "name": "Daniel Wilhelm"},
{"nick": "historic_bruno", "name": "Ben Brian"},
{"nick": "idanwin"},
{"nick": "infyquest", "name": "Vijay Kiran Kamuju"},
{"nick": "IronNerd", "name": "Matthew McMullan"},
{"nick": "Itms", "name": "Nicolas Auvray"},
{"nick": "Jaison", "name": "Marco tom Suden"},
{"nick": "jammus", "name": "James Scott"},
{"nick": "Jgwman"},
{"nick": "Josh", "name": "Joshua J. Bakita"},
{"nick": "jP_wanN", "name": "Jonas Platte"},
{"nick": "Jubalbarca", "name": "James Baillie"},
{"nick": "JubJub", "name": "Sebastian Vetter"},
{"nick": "kabzerek", "name": "Grzegorz Kabza"},
{"nick": "Kai", "name": "Kai Chen"},
{"name": "Kareem Ergawy"},
{"nick": "kevmo", "name": "Kevin Caffrey"},
{"nick": "kezz", "name": "Graeme Kerry"},
{"nick": "kingadami", "name": "Adam Winsor"},
{"nick": "kingbasil", "name": "Giannis Fafalios"},
{"nick": "lafferjm", "name": "Justin Lafferty"},
{"nick": "leper", "name": "Georg Kilzer"},
{"nick": "livingaftermidnight", "name": "Will Dull"},
{"nick": "Louhike"},
{"nick": "lsdh"},
{"nick": "madmax", "name": "Abhijit Nandy"},
{"nick": "m0l0t0ph", "name": "Christoph Gielisch"},
{"nick": "markcho"},
{"nick": "MarkT", "name": "Mark Thompson"},
{"nick": "Markus"},
{"nick": "Matei", "name": "Matei Zaharia"},
{"nick": "MattDoerksen", "name": "Matt Doerksen"},
{"nick": "mattlott", "name": "Matt Lott"},
{"nick": "maveric", "name": "Anton Protko"},
{"nick": "Micnasty", "name": "Travis Gorkin"},
{"nick": "mimo"},
{"nick": "mk12", "name": "Mitchell Kember"},
{"nick": "Molotov", "name": "Dario Alvarez"},
{"nick": "mpmoreti", "name": "Marcos Paulo Moreti"},
{"nick": "mreiland", "name": "Michael Reiland"},
{"nick": "myconid"},
{"nick": "nd3c3nt", "name": "Gavin Fowler"},
{"nick": "niektb", "name": "Niek ten Brinke"},
{"nick": "njm"},
{"nick": "NoMonkey", "name": "John Mena"},
{"nick": "notpete", "name": "Rich Cross"},
{"nick": "Ols", "name": "Oliver Whiteman"},
{"nick": "olsner", "name": "Simon Brenner"},
{"nick": "otero"},
{"name": "Nick Owens"},
{"nick": "Palaxin", "name": "David A. Freitag"},
{"name": "Paul Withers"},
{"nick": "pcpa", "name": "Paulo Andrade"},
{"nick": "Pendingchaos"},
{"nick": "PeteVasi", "name": "Pete Vasiliauskas"},
{"nick": "Polakrity"},
{"nick": "Poya", "name": "Poya Manouchehri"},
{"name": "Quentin Pradet"},
{"nick": "prefect", "name": "Nicolai Hähnle"},
{"nick": "pstumpf", "name": "Pascal Stumpf"},
{"name": "André Puel"},
{"nick": "Prodigal Son"},
{"nick": "pyrolink", "name": "Andrew Decker"},
{"nick": "quantumstate", "name": "Jonathan Waller"},
{"nick": "QuickShot", "name": "Walter Krawec"},
{"nick": "quonter"},
{"nick": "qwertz"},
{"nick": "Radagast"},
{"nick": "Raj", "name": "Raj Sharma"},
{"nick": "RedFox", "name": "Jorma Rebane"},
{"nick": "RefinedCode"},
{"nick": "Riemer"},
{"name": "Rolf Sievers"},
{"nick": "s0600204", "name": "Matthew Norwood"},
{"nick": "SafaAlfulaij"},
{"nick": "sanderd17", "name": "Sander Deryckere"},
{"nick": "sathyam", "name": "Sathyam Vellal"},
{"nick": "sbte", "name": "Sven Baars"},
{"nick": "scroogie", "name": "André Gemünd"},
{"nick": "scythetwirler", "name": "Casey X."},
{"nick": "serveurix"},
{"nick": "Shane", "name": "Shane Grant"},
{"nick": "Silk", "name": "Josh Godsiff"},
{"nick": "silure"},
{"nick": "Simikolon", "name": "Yannick & Simon"},
{"nick": "Spahbod", "name": "Omid Davoodi"},
{"nick": "stanislas69", "name": "Stanislas Dolcini"},
{"nick": "Stefan"},
{"nick": "stilz", "name": "Sławomir Zborowski"},
{"nick": "stwf", "name": "Steven Fuchs"},
{"nick": "t4nk004"},
{"nick": "tbm", "name": "Martin Michlmayr"},
{"nick": "tau"},
{"nick": "Teiresias"},
{"nick": "thamlett", "name": "Timothy Hamlett"},
{"nick": "thedrunkyak", "name": "Dan Fuhr"},
{"nick": "TrinityDeath", "name": "Jethro Lu"},
{"nick": "triumvir", "name": "Corin Schedler"},
{"nick": "trompetin17", "name": "Juan Guillermo"},
{"nick": "vladislavbelov", "name": "Vladislav Belov"},
{"nick": "vts", "name": "Jeroen DR"},
{"nick": "WhiteTreePaladin", "name": "Brian Ashley"},
{"nick": "wraitii", "name": "Lancelot de Ferrière le Vayer"},
{"nick": "Xentelian", "name": "Mark Strawson"},
{"nick": "Xienen", "name": "Dayle Flowers"},
{"nick": "xtizer", "name": "Matt Green"},
{"nick": "yashi", "name": "Yasushi Shoji"},
{"nick": "Ykkrosh", "name": "Philip Taylor"},
{"nick": "Yves"},
{"nick": "Zeusthor", "name": "Jeffrey Tavares"},
{"nick": "zoot"},
{"nick": "zsol", "name": "Zsolt Dollenstein"},
{"nick": "Zyi", "name": "Charles De Meulenaer"}
]
}
]
}

View File

@ -0,0 +1,40 @@
{
"Content": [
{
"Title": "In Memoriam",
"List": [
{"nick": "Phoenix-TheRealDeal", "name": "Ken Wood"},
{"nick": "Dak Lozar", "name": "Dave Loeser"}
]
},
{
"Title": "Special thanks to:",
"Content": [
{
"Subtitle": "0 A.D. Founder",
"List": [{"nick": "Wijitmaker", "name": "Jason Bishop"}]
},
{
"Subtitle": "Project Leaders",
"List": [
{"nick": "feneur", "name": "Erik Johansson"},
{"nick": "Mythos_Ruler", "name": "Michael D. Hafer"}
]
},
{
"Subtitle": "Co-Lead Designers",
"List": [
{"nick": "Phoenix-TheRealDeal", "name": "Ken Wood"},
{"nick": "Acumen", "name": "Stuart Walpole"}
]
}
]
},
{
"Title": "And thanks to the entire community for making 0 A.D. possible."
},
{
"Title": "No historians were harmed during the development of this project."
}
]
}

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<page>
<include>common/modern/setup.xml</include>
<include>common/modern/styles.xml</include>
<include>common/modern/sprites.xml</include>
<include>common/global.xml</include>
<include>credits/styles.xml</include>
<include>credits/sprites.xml</include>
<include>credits/credits.xml</include>
</page>

View File

@ -535,28 +535,14 @@
<translate>Alpha XIX: Syllepsis</translate>
<keep>[/font]\n\n</keep>
<translate>WARNING: This is an early development version of the game. Many features have not been added yet.</translate>
<keep>\n\n</keep>
<translate>Get involved at: play0ad.com</translate>
</attribute>
</object>
<!-- CONTACT METHODS -->
<!-- GET INVOLVED -->
<object type="button"
style="StoneButton"
tooltip_style="pgToolTip"
size="8 100%-108 100%-8 100%-80"
>
<translatableAttribute id="caption">Help with the Translation!</translatableAttribute>
<translatableAttribute id="tooltip">Click to open the 0 A.D. translate page in your browser.</translatableAttribute>
<action on="Press"><![CDATA[
openURL("http://trac.wildfiregames.com/wiki/Localization");
]]></action>
</object>
<object type="button"
style="StoneButton"
tooltip_style="pgToolTip"
size="8 100%-72 50%-4 100%-44"
size="8 100%-144 50%-4 100%-116"
>
<translatableAttribute id="caption">Website</translatableAttribute>
<translatableAttribute id="tooltip">Click to open play0ad.com in your web browser.</translatableAttribute>
@ -568,7 +554,7 @@
<object type="button"
style="StoneButton"
tooltip_style="pgToolTip"
size="50%+4 100%-72 100%-8 100%-44"
size="50%+4 100%-144 100%-8 100%-116"
>
<translatableAttribute id="caption">Chat</translatableAttribute>
<translatableAttribute id="tooltip">Click to open the 0 A.D. IRC chat in your browser. (#0ad on webchat.quakenet.org)</translatableAttribute>
@ -580,7 +566,7 @@
<object type="button"
style="StoneButton"
tooltip_style="pgToolTip"
size="8 100%-36 100%-8 100%-8"
size="8 100%-108 100%-8 100%-80"
>
<translatableAttribute id="caption">Report a Bug</translatableAttribute>
<translatableAttribute id="tooltip">Click to visit 0 A.D. Trac to report a bug, crash, or error.</translatableAttribute>
@ -589,6 +575,30 @@
]]></action>
</object>
<object type="button"
style="StoneButton"
tooltip_style="pgToolTip"
size="8 100%-72 100%-8 100%-44"
>
<translatableAttribute id="caption">Translate the game</translatableAttribute>
<translatableAttribute id="tooltip">Click to open the 0 A.D. translate page in your browser.</translatableAttribute>
<action on="Press"><![CDATA[
openURL("http://trac.wildfiregames.com/wiki/Localization");
]]></action>
</object>
<object type="button"
style="StoneButton"
tooltip_style="pgToolTip"
size="8 100%-36 100%-8 100%-8"
>
<translatableAttribute id="caption">Credits</translatableAttribute>
<translatableAttribute id="tooltip">Click to see the 0 A.D. credits.</translatableAttribute>
<action on="Press">
Engine.PushGuiPage("page_credits.xml", {});
</action>
</object>
</object>
<!-- LOGO AND BUILD VERSION -->

View File

@ -1,67 +0,0 @@
"0 A.D."
Cast of Characters
Dude #768 Minion #392
Dude #162 Minion #864
Dude #794 Minion #894
Dude #765 Minion #896
Dude #668 Minion #331
Dude #748 Minion #892
Dude #963 Minion #870
Dude #564 Minion #321
Dude #731 Minion #891
Polly Gonne Dudette
and introducing
Roastin' Staff Rooster as himself
No historians were harmed during the development of this project.
© 2002-2007 Wildfire Games. All rights reserved.
This product is intended solely for private home use. Public performance or other use is expressly prohibited.

View File

@ -236,6 +236,7 @@
"globalscripts/**.js",
"gui/civinfo/**.js",
"gui/common/**.js",
"gui/credits/**.js",
"gui/locale/**.js",
"gui/msgbox/**.js",
"gui/options/**.js",
@ -268,6 +269,7 @@
"globalscripts/**.xml",
"gui/civinfo/**.xml",
"gui/common/**.xml",
"gui/credits/**.xml",
"gui/locale/**.xml",
"gui/msgbox/**.xml",
"gui/options/**.xml",
@ -286,6 +288,18 @@
"translate": {}
}
}
},
{
"extractor": "json",
"filemasks": [
"gui/credits/texts/**.json"
],
"options": {
"keywords": [
"Title",
"Subtitle",
]
}
},
{
"extractor": "json",

View File

@ -0,0 +1,127 @@
#!/usr/bin/env python2
# -*- coding:utf-8 -*-
#
# Copyright (C) 2016 Wildfire Games.
# This file is part of 0 A.D.
#
# 0 A.D. is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# 0 A.D. is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
"""
This file imports the translators credits located in the public mod GUI files and
runs through .po files to add possible new translators to it.
It only appends new people, so it is possible to manually add names in the credits
file and they won't be overwritten by running this script.
Translatable strings will be extracted from the generated file, so this should be ran
before updateTemplates.py.
"""
from __future__ import absolute_import, division, print_function, unicode_literals
import json, os, glob, re
# Credited languages - Keep in sync with source/tools/dist/remove-incomplete-translations.sh
langs = {
'cs': 'Czech',
'de': 'German',
'en_GB': 'English (UK)',
'es': 'Spanish',
'fr': 'French',
'gd': 'Gaelic',
'gl': 'Galician',
'id': 'Indonesian',
'it': 'Italian',
'nl': 'Dutch',
'pl': 'Polish',
'pt_PT': 'Portuguese (Portugal)',
'pt_BR': 'Portuguese (Brazil)',
'ru': 'Russian',
'sk': 'Slovak',
'tr': 'Turkish'}
root = '../../../'
poLocations = [
'binaries/data/l10n/',
'binaries/data/mods/public/l10n/',
'binaries/data/mods/mod/l10n/']
creditsLocation = 'binaries/data/mods/public/gui/credits/texts/translators.json'
# Load JSON data
creditsFile = open(root + creditsLocation)
JSONData = json.load(creditsFile)
creditsFile.close()
# This dictionnary will hold creditors lists for each language, indexed by code
langsLists = {}
# Create the new JSON data
newJSONData = {'Content': []}
# First get the already existing lists. If they correspond with some of the credited languages,
# add them to the new data after processing, else add them immediately.
# NB: All of this is quite inefficient
for element in JSONData['Content']:
if 'Title' not in element or element['Title'] not in langs.values():
newJSONData['Content'].append(element)
continue
for (langCode, langName) in langs.items():
if element['Title'] == langName:
langsLists[langCode] = element['List']
break
# Now actually go through the list of languages and search the .po files for people
# Prepare some regexes
commentMatch = re.compile('#.*')
translatorMatch = re.compile('# ([\w\s]*)(?: <.*>)?, [0-9-]', re.UNICODE)
# Search
for lang in langs.keys():
if lang not in langsLists.keys():
langsLists[lang] = []
for location in poLocations:
files = glob.glob(root + location + lang + '.*.po')
for file in files:
poFile = open(file.replace('\\', '/'))
reached = False
for line in poFile:
line = line.decode('utf8')
if reached:
if not commentMatch.match(line):
break
m = translatorMatch.match(line)
if m:
langsLists[lang].append(m.group(1))
if line.strip() == '# Translators:':
reached = True
poFile.close()
# Sort and remove duplicates
# Sorting should ignore case to have a neat credits list
langsLists[lang] = sorted(set(langsLists[lang]), cmp=lambda x,y: cmp(x.lower(), y.lower()))
# Now insert the new data into the new JSON file
for (langCode, langList) in sorted(langsLists.items()):
newJSONData['Content'].append({'Title': langs[langCode], 'List': []})
for name in langList:
newJSONData['Content'][-1]['List'].append({'name': name})
# Save the JSON data to the credits file
creditsFile = open(root + creditsLocation, 'w')
json.dump(newJSONData, creditsFile, indent=4)
creditsFile.close()