Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
<!DOCTYPE HTML><html xmlns="http://www.w3.org/1999/xhtml"><head><!-- There is, at present, no official xsd for (X)HTML5. A pity. Usefulness would depend on the parser and extensions made by the site. --> <title>Hedgewars Hats</title> <style type="text/css">* {padding: 0; margin: 0; }body { background: url('http://hedgewars.googlecode.com/hg/share/hedgewars/Data/Themes/Nature/Sky.png') fixed no-repeat bottom left; -moz-background-size: 200%; background-size: 200%; font-family: sans-serif; overflow: hidden;}h1 { text-shadow: 0 0 2px white; }a { margin-top: 12px; margin-left: 20px; float: left; height: 32px; width: 32px; color: transparent; background-image: url("http://hedgewars.googlecode.com/hg/share/hedgewars/Data/Graphics/Hedgehog/Idle.png");}.girder{ width: 100%; height: 30px; clear: left; background-image: url('http://hedgewars.googlecode.com/hg/share/hedgewars/Data/Themes/Nature/Girder.png'); background-repeat: repeat-x;}.hide { visibility: hidden; }a div{ margin-top: -5px; height: 32px; width: 32px;} </style> <script type="application/ecmascript">//<![CDATA[/* javascript version of a sprite sheet - this could be pretty trivially done in pure HTML, but maintenancewould be easier with a server-side portion. list of sprites could be gotten from googlecode, but would require XSS whitelisting */var masks = ['4gsuif', 'Coonskin3', 'jigglypuff', 'NinjaStraight', 'Ryu', 'sth_Super','AkuAku', 'Cororon', 'judo', 'NinjaTriangle', 'Samurai', 'sth_Tails','android', 'Cowboy', 'junior', 'OldMan', 'Samus', 'stormcloud','angel', 'crown', 'Ken', 'OrangeHair', 'Santa', 'stormtrooper','anzac', 'cyborg', 'KirbyMask', 'orange', 'SauceBoatSilver', 'StrawHatEyes','apple', 'darthvader', 'kiss_criss', 'Pantsu', 'ShaggyYeti', 'StrawHatFacial','ash', 'Deer', 'kiss_frehley', 'Pig', 'sheep', 'StrawHat','Balrog', 'diglett', 'kiss_simmons', 'pikachu', 'ShortHair_Black', 'Sunglasses','banana', 'Disguise', 'kiss_stanley', 'PinkHair', 'ShortHair_Brown', 'SunWukong','Bandit', 'Dragon', 'knight', 'pinksunhat', 'ShortHair_Grey', 'Teacup','beaver', 'dwarf', 'Kululun', 'pirate_jack_bandana', 'ShortHair_Red', 'Teapot','beefeater', 'eastertop', 'Ladle', 'pirate_jack', 'ShortHair_Yellow', 'Terminator_Glasses','Blanka', 'Elvis', 'lambda', 'Plunger', 'Skull', 'test','BlankaToothless', 'Eva_00b', 'Laminaria', 'policecap', 'Sleepwalker', 'thug','BlueCap', 'Eva_00y', 'laurel', 'porkey', 'slowpoke', 'Toad','BlueHair', 'Falcon', 'lemon', 'PrincessDaisy', 'Sniper', 'tophats','Bob', 'Gasmask', 'link', 'PrincessPeach', 'Sonic', 'ushanka','BrainSlugMouth', 'Geordi', 'lugia', 'Pumpkin_Hat', 'SparkleSuperFun', 'Vega','BrainSlug', 'Glasses', 'Luigi', 'PurpleHair', 'spartan', 'venom','Bub', 'GreenCap', 'Mario', 'quotecap', 'spidey', 'Viking','Bunny', 'GreenHair', 'MegaHogX', 'Rain', 'squirtle', 'voltorb','charmander', 'GreyHair', 'mickey_ears', 'Rambo', 'sth_AmyClassic', 'Wario','chef', 'Guile', 'Moose', 'rasta', 'sth_Amy', 'WhySoSerious','chikorita', 'HogInTheHat', 'mp3', 'RedCap', 'sth_Eggman', 'WizardHat','Chunli', 'Honda', 'mudkip', 'RedHair', 'sth_Knux', 'YellowCap','clown-copper', 'IndianChief', 'Mummy', 'RobinHood', 'sth_Metal', 'YellowHair','clown-crossed', 'InfernalHorns', 'naruto', 'royalguard', 'sth_Shadow', 'Zombi','clown', 'Jason', 'NinjaFull', 'RSR', 'sth_Sonic'];var themes = {"Stage":1,"Island":0,"Eyes":0,"Deepspace":0,"Jungle":1,"Cake":0,"Compost":1,"Planes":0,"Olympics":1,"Bath":1,"Cheese":0,"Desert":1,"Christmas":1,"CrazyMission":0,"Sheep":1,"Brick":0,"Underwater":1,"City":1,"EarthRise":0,"Blox":0,"Hell":0,"Bamboo":1,"Freeway":0,"Nature":1,"Art":1,"Halloween":1,"Snow":1,"Castle":1};var girder;var animationInterval;window.onload = function(){ var opt = document.createElement("option"); opt.appendChild(document.createTextNode("")); var sel = document.body.appendChild(document.createElement("select")); sel.onchange = switchTheme; for(var theme in themes) { sel.appendChild(opt.cloneNode(true)); sel.lastChild.value = theme; sel.lastChild.lastChild.data = theme; if(theme == "Nature") sel.lastChild.selected = true; } var chk = document.createElement("input"); chk.type = "checkbox"; chk.onclick = switchAnim; document.body.appendChild(chk); chk = chk.cloneNode(false); chk.onclick = hideGirders; document.body.appendChild(chk); var s = document.styleSheets[0].cssRules; for(var i=0;i<s.length;i++) if (s[i].selectorText.toLowerCase()==".girder") girder = s[i]; var a = document.createElement("a"); var g = document.createElement("div"); g.className="girder"; a.appendChild(document.createElement("div")); a.lastChild.appendChild(document.createTextNode("")); for (var i=0;i<masks.length;i++) { var h = document.body.appendChild(a.cloneNode(true)); h.href = "http://hedgewars.googlecode.com/hg/share/hedgewars/Data/Graphics/Hats/"+masks[i]+".png"; h.lastChild.style.backgroundImage = 'url("'+h.href+'")'; h.lastChild.lastChild.data = masks[i]; h.title = masks[i]; h.idle = Math.floor(Math.random()*19); if (i%17==16 || i==masks.length-1) document.body.appendChild(g.cloneNode(false)); }/* quick and dirty animation */animationInterval = setInterval(animateHogs, 128);}function animateHogs(){ var a = document.getElementsByTagName("a"); for (var i=0;i<a.length;i++) { a[i].style.backgroundPosition=Math.floor(a[i].idle/16)*-32+"px "+(a[i].idle%16)*-32+"px"; a[i].firstChild.style.backgroundPosition=Math.floor(a[i].idle/16)*-32+"px "+(a[i].idle%16)*-32+"px"; a[i].idle++; if (a[i].idle > 18) a[i].idle = 0; }}function switchAnim(){ if (animationInterval) { clearInterval(animationInterval); animationInterval = null; } else animationInterval = setInterval(animateHogs, 128);}function hideGirders(){ var g = document.getElementsByClassName("girder"); for(var i=0;i<g.length;i++) if (this.checked) g[i].className = "girder hide"; else g[i].className = "girder";}function switchTheme(){ document.body.style.backgroundImage='url("http://hedgewars.googlecode.com/hg/share/hedgewars/Data/Themes/'+this.value+'/Sky.png")'; if (themes[this.value]) girder.style.backgroundImage='url("http://hedgewars.googlecode.com/hg/share/hedgewars/Data/Themes/'+this.value+'/Girder.png")'; else girder.style.backgroundImage='url("http://hedgewars.googlecode.com/hg/share/hedgewars/Data/Graphics/Girder.png")';}//]]> </script></head><body><h1>List of Hedgewars hats</h1></body></html>