Aloshi / EmulationStation

A flexible emulator front-end supporting keyboardless navigation and custom system themes.
MIT License
2.07k stars 904 forks source link

Theme Support #8

Closed Aloshi closed 11 years ago

Aloshi commented 12 years ago

I've begun adding initial theme support, and I've put instructions in the README.md. There's still a lot to do, but now you can insert any images you want and have them scale.

Off the top of my head:

  1. Allow color definitions for the game list - e.g. game name color, folder color, selector color.
  2. Add an option to hide the header text.
  3. Add more positioning options for images (right now X is the center of the image and Y is the top...confusing!)
  4. Add a tile option for resizing.

I have no artistic talent, so I'm essentially making tools I won't use, and as such, won't get tested very well. So if you're trying to do something and it seems harder than it should be, tell me! Odds are I can fix it. Looking forward to seeing what you guys make.

Xevin-zz commented 12 years ago

YAY! I shall experiment and make pretty things with the tools you have given me. =)

Aloshi commented 12 years ago

Progress! . and ~ are now expanded into the theme.xml's directory and $HOME respectively, which means distributing themes should be as easy as unzipping them into your system's ROM folder. Themes also now load from the system's path, e.g. ~/ROMs/nes/theme.xml. I also fixed percentages being completely broken (at least I hope).

DeCadanz commented 12 years ago

If I rightly understand, I can't make one theme, place it to the ES folder and keep my ROMs on a USB flash? I must keep themes on USB flash too? Aloshi, can u give me your skype or ICQ via e-mail?

Aloshi commented 12 years ago

At the moment, that's correct. I could probably make a theme in ~/.emulationstation/ take precedence if it exists. I'll see if I can add that quick today.

And sorry, I don't use Skype or ICQ. Usually the best place to find me is Steam, Xfire, or MSN Messenger/Windows Live Messenger.

DeCadanz commented 12 years ago

Maybe the best way is a keep theme_nes.xml, theme_snes.xml and other theme files in a ~/.emulationstation folder? Or merge themes in a single .xml file?

Aloshi commented 12 years ago

I'd like to avoid adding another variable that needs to be defined in the systems config file, and a single theme file would get messy for people with lots of systems/detailed themes. May I ask why you'd rather have themes stored in the .emulationstation folder? Just for organization?

DeCadanz commented 12 years ago

Firstly for organisation, secondly because I think ROM folder must be divorced from ES, for example, I want to keep my ROMs on a USB flash. In any case, big thanks for work and for responsiveness!

P.S. Or maybe just add support for additional ROMs folder (e.g. USB flash). In this case some ROMs and theme will be loaded from local ROM folder, and some ROMs will be loaded from USB flash? But I think easiest way is a place theme files to ES folder.

And I forgot, сan I specify folder for ROMs in config file?

Xevin-zz commented 12 years ago

I just had a chance to play with the latest version of ES. Love the changes! Things are really starting to shape up nicely.

I think I'm with DeCadanz on the theme and list files. I think they should be defined in the es_systems.cfg so you can place them anywhere (I'd rather have them in .emulationstation too) For me it's because it's a lot of trouble having configure files spread out all over the place. Also so I can name the files whatever I want. (snes_theme.xml snes_gamelist.xml is my preference).

Although I don't agree on the single xml for all themes. I'd like to have them separated as they will get confusingly long after you add 10+ systems.

Some requests for theme.xml:

Add to type "image" the following options: "ar_lock" (so an image will not stretch out of aspect. Also "ar_lock" set to "1" with dim set to "1 1" crops to fill screen I would think.) "tiling" (you already said this one) "origin" (so you can set the "center" of the images. i.e. top-left, bottom-right, center) (you already said you are working on this with "more positioning options" I think)

Add type "background" (its almost like image but rendered underneath everything and has a "color" option) options: "path" "color" "pos" "dim" "ar_lock" "tiling" "origin"

Add type "text" options: "source" (the actual text) "font" (define a ttf font file) "color" (hex color code) "size" "style" (bold, italics, all-caps, all-caps-bold)

Add type "gamelist" options: "list-font" (define a ttf font file for the list text) "list-color" (hex color for normal list text) "list-color-selected" (hex color for selected list text) "list-size" (font size of list items) "list-style" (bold, italics, all-caps, all-caps-bold) "list-selector" (hex color for the game selector) "name-font" "name-color" "name-size" "name-style" "desc-font" "desc-color" "desc-size" "desc-style" "image-size" (square pixel size for game image. i.e. 256 means 256x256, which means an image will be stretched or shrunk to fit inside the 256x256 area) "info-font" "info-color" "info-size" "info-style"

Requests for gamelist.xml: Add the name of the selected game under the game image. It's a little redundant, but looks very nice I think.

Add: "developer" "publisher" "release_date" "language" (not sure this is really needed) "genre" (RPG, Platformer, Racing, Fighting, etc...)

All these options would be located directly between the selected game name and the description text, and listed in a single row. theming for these items would be linked together and start with the prefix "info" in the theme.xml.

Also I noticed something strange with PNG images in gamelist.xml. It renders the alpha area incorrectly. I'm not sure if Alpha for PNG is enabled or even supported, but I thought I would say something just in case you missed this problem. I can attach/send you a screenshot if you need it.

That's all I got. Again, please disregard any impossible things I ask for. =P

And thanks for sticking to this project! It's gonna be awesome!!!!

Aloshi commented 12 years ago

Holy feature list, batman! I better get to work.

At the moment, ES loads one font file into three different sizes on startup. Some GUI elements position themselves around sizing information from these fonts at creation time. It'll take some rewriting to allow using different fonts (and different sizes) and I'm not sure how much memory a font takes up (each size has to be loaded independently). I'll save this for another time. Also, font styles are actually different font files (italics/bold are a special italic version of the original font). I'll probably hold off on adding the text type entirely until this is done, because it's nearly useless without this stuff.

Regarding PNG transparency - SDL is weird about transparency, but I think I know how to fix this (switch SDL_DisplayFormat to SDL_DisplayFormatAlpha).

I'll see what I can do tomorrow.

elpendor commented 12 years ago

As far as the scraper goes, thegamesdb already has developer, publisher, release date and genre stored in their database, so there's no need to look elsewhere. All it takes is a minor edit to the script.

Aloshi commented 12 years ago

Okay, I've added a lot of the things you asked for. This will probably be the last big update for a while, aside from bugfixes, as I'm leaving tomorrow. Hopefully there's enough here to start making a theme.

You can see what I added in the new THEMES.md file. I worked into the tag - just leave one percentage as 0 and it'll scale that axis the same as the other, hopefully preserving the aspect ratio.

Xevin-zz commented 12 years ago

New changes are AWESOME!!! Almost everything I need now.

I noticed a few things though...

Images in the theme.xml stack by order. That is the background is on top then the SNES logo image is underneath it. (took me a while to figure out what was going on hehe)

The alpha channel on the game image is still broken. I tried adding to the gamelist.xml, but obviously it didn't work.

Game desc does not support line breaks. Every time there is a break it adds a little box.

When a game's title is longer then the area in the game list, it stretches into the game info column. I'm not sure there is anything you can do about this though. Maybe add an option to have the game titles left align, so it just goes off the side of the screen instead.

When using the option hideHeader inside one theme.xml it is removed from all systems. (although I only have one theme.xml in my snes system folder, so it could be that I just need to make a default es_theme.xml and that will fix this problem.)

When using the option hideHeader, the area that the header would have been at is still used up on both columns. While it would be better for the games list column to reclaim that area, I need that gap (or maybe even a little more) for the system image.

There is no margin for the game desc text area. Looks a bit odd ridding right up to the side of the screen. A .03 - .08 gap would make it look great IMO.

Is there any way to add just a little more real estate for the game info column? or better yet make it a configurable split. like 50/50, 40/60, or 30/70?

Here is an image of my progress thus far: http://imgur.com/c7vgS

Thanks again man! I look forward to when you get more free time to work on this project. =)

Aloshi commented 12 years ago

'Stack by order', can you give me an example? It should work so that the first elements defined draw first - so background at the top, visual elements follow or are nested inside.

Ah, the hideHeader stuff is indeed a bug - I forgot to re-initialize the theme when it loads a new one. This should be easy to fix.

Regarding the alpha channel on the game image - another easy fix, but since alpha channels slow down rendering, I didn't do it. I can add it anyway. I mean, we're already getting 7fps, what's another 2? :P

If I find some spare time I'll try to fix the game desc new line thing. I think it's pretty important and should just be a two-line thing in the draw wrapped text function.

I'll see what I can do with regards to the split.

And I love the picture! :)

elpendor commented 12 years ago

That pic looks pretty damn good. Can't wait to see what themes people come up with. I really wanna give it a shot but I suck at design or any visual stuff so I haven't even tried yet.

Also, I fixed a little bug in the scraper and added developer, publisher, release date and genre.

Aloshi commented 12 years ago

Fixed/added almost everything in your recent post, Xevin! I increased the split to 50/50, but I didn't make it configurable. I personally think it's one of those things that should be consistent between themes. You can use a left-aligned list by adding <listLeftAlign /> to a theme. I'd like to add automatic truncation to the centered list, but probably won't get around to it.

If you want to play around with the split, you can change the percentage in src/components/GuiGameList.cpp, at the top: const float GuiGameList::sInfoWidth = 0.5; Everything else should size properly around it.

Xevin-zz commented 12 years ago

SWEET! Didn't expect an update for a while hehe.

Yes. That is how they are stacking. I just didn't realize for a while. I was assuming it was the opposite order, but after I realized what was going on, it all made sense to me. I figured I'd say it in case someone else got hung up on that.

I'm not too concerned with frame rate right now. It's usable even at 1FPS. Since there's no animations, it's hard to perceive the low frame rate really. Other then input lag, I can't tell. And so long as it works, that's all that matters at the moment. =)

Can't wait to see left align in action. I think it'll look spectacular!

I agree with you about the split needing to be the same on all systems. I was thinking configurable globally, but 50/50 is what I really wanted hehe.

Also I forgot to mention another possible bug I found. The hex color code on the selector (and maybe other things too) is tricky. I was expecting #800000 to give me the dark red color I was after, but that would just render as black. After some experimenting I got the color I was after with #008000. I'm not sure why though.

Also I tried swapping the default font with Century Gothic, but I would get an error about segmentation or something. So I swapped it with LiberationSansNarrow-Bold.ttf (its a font that comes with Raspbian) It looks pretty nice I think, but I wonder why Century Gothic didn't work...

I'm building the latest right now, but it's taking an extra long time. I'm not sure what's going on, but I don't have any more time to play with it tonight. I will have to wait till tomorrow. :'(

Thanks again for working on this project! I'm sure there are a lot of people that will appreciate the hard work you are doing. I think as it stands today, EmulationStation is the best emulation front end on Linux already. Pretty damn awesome IMO!

Xevin-zz commented 12 years ago

So I've been making themes for the past few days and so far everything is really awesome! I have most of the tools I need to make things happen the way I want now. Here's the themes I've made so far:

GameBoy: http://i.imgur.com/JfZzr.png GameBoy Color: http://i.imgur.com/mg3TF.png Genesis: http://i.imgur.com/ozm5t.png NES: http://i.imgur.com/dAmCB.png

Some things I still would like to have: Selector Text Color A small (2-5%) margin between the desc text and the game list Game name, developer publisher, release date and genre above the game desc

A new feature I think would really be awesome for the future is auto resizing the game desc text if it flows past the edge of the screen. (not sure how this could be done though...) Maybe it would be better to add font and size control somehow instead.

Something odd I noticed the "é" in Pokémon gets changed into a string of weird letters.

Good work so far! I love that the game art now centers with the column. Looks really sharp!

Aloshi commented 12 years ago

These are fantastic!! I hope you put up a download link when you're happy with them. :)

Selector text color - while you might not use it, ES supports folders, which have a different color. The problem with setting the selector text color is that both games and folders will look the same when selected. I haven't thought up a nice way around this.

Currently, the description goes from 3% to 47% of the screen. I could narrow it a little more.

What's really on my radar is moving the renderer away from SDL and to something faster (likely Qt). At the moment I don't have very easy access to my Pi, and classes are starting up in a few days. I'm not sure when I'll get a chance to work on it. I'm hesitating on adding any new features because that just means I'll have to re-implement them with the new renderer (if migrating will go how I think it will). Since Qt is built for stuff like this, it'll be a lot easier to add text controls with custom font loading and sizing, and eventually animations. I need to test if Qt is up to it, but I assume it'll be fast enough.

Also the pokemon thing is weird! SDL has some unicode functions, maybe I can use one of those to render.

Xevin-zz commented 12 years ago

Thanks. I plan to make a release with all the themes, game descriptions for all English release games, and box art for all the games when I have it all done.

I think its acceptable to have the folders and list items the same color when selected. :)

I don't know much about programming, but I've heard of Qt before. If that gets us faster speed with a possibility of animations, do it! That's a pretty awesome thing to have.

octopositron commented 12 years ago

I installed EmulationStation under Raspbian (on the RPi, obviously) with PetRockBlog's RetroPie script, and am having trouble with themes. With my theme file in /home/pi/.emulationstation/es_theme.xml, using the example theme file given in THEMES.md, I can get the background to work fine, but I cannot get the:

<listPrimaryColor>0000FF</listPrimaryColor>
<listSecondaryColor>00FF00</listSecondaryColor>

to take effect.

Any suggestions?

EDIT: Sorry, I fixed that, however, is it possible to change the colour of the header?

Aloshi commented 12 years ago

At the moment, unfortunately no. There are plenty of things I want to add to theming (like that, more positioning options for the gamelist, etc.) but I won't be able to do anything until I finish the renderer rewrite.

Xevin-zz commented 12 years ago

I just got a chance to try out the new render engine. Very nice! Most of my themes are running at 60 FPS! Awesome sauce!!!!

And then I found some problems... (You knew it was coming!) Most of the problems I encountered I cannot explain the issue very well, so I zipped up the themes I have made so far and put them here: http://www.mediafire.com/?lhranmmsdxqd8gl

That's my entire /RetroPie/roms/ folder.

The Problems:

Some of the themes run at ~6FPS, but there is no difference in their composition compared to other themes that run at ~60FPS. I suspect it has to do with the alpha channel or the compression type, but I'm not sure how to go about testing for this. All the images I made were made in PhotoShop, so I don't know where the difference is exactly.

Some alpha channels render incorrectly. Please see the DMG Game Boy logo. Not sure what's wrong because other alphas look fine (and better then they used to even!)

The header area moved up about 5-10%. Now the box art covers up the logos of the systems. If this was configurable, then I'd be set. ;)

Some game desc text encroaches on the game list. Please see Super Mario Bros. 3 on the NES page.

Old problems:

Need a small gap between the center of the screen and the games list and game desc.

Other then that, this is shaping up NICELY! I can't wait to get back to my theming project! I still have NeoGeo, Game Boy Advance, Super Nintendo, Sega Master System, Sega Game Gear and MAME to do. =)

Aloshi commented 12 years ago

Awesome, themes to play with! :D

My best guess for the 6 FPS thing is that it probably has to do with me allowing non-power-of-2 textures (because I was lazy). This isn't a particularly hard fix (just clamp a texture size to the next power-of-2 and fix the texture coordinates). I'm not sure if this is it, but I'll give it a shot (you don't need to fix your images).

Aloshi commented 12 years ago

Pendor and I did a little experimenting today and found that the slowdown culprit appears to be tiling.

At the moment tiled images aren't using glDrawArrays in an optimal way - it sets up a new array for each "tile," draws it, and repeats - this can be consolidated into a single array and glDrawArrays call. I'll give this a try soon.

Also, using your theme.xml/gamelist.xml has made me realize how important relative paths are for distribution. It works for themes (just change your /home/pi/RetroPie/roms/nes/nes_art to ./nes_art), I really should add it for gamelists too.

Aloshi commented 12 years ago

I've fixed tiling for the NES theme, so now it runs at about 40-45 FPS. I haven't looked at the weird alpha thing or text sizing problem yet, but I'll try and get to it soon. I'd really like to add a theme tag for header height and gamelist offset, I'll try and do that soon.

Aloshi commented 12 years ago

I've pushed some changes which add a few new theming options (involving manipulating the list and position of the game image). I also might've introduced a crash bug...but I'm working on fixing that.

petrockblog commented 12 years ago

@Xevin: I had the idea to put some "default" themes to Emulation Station and Aloshi and I came to the conclusion (https://github.com/Aloshi/EmulationStation/issues/19) that it might be of advantage to add themes to the RetroPie script (https://github.com/petrockblog/RetroPie-Setup). Since you have spent a lot of effort into building very nice themes I want to ask you if I could add your themes to the RetroPie script as default themes?

Xevin-zz commented 12 years ago

Absolutely! I would consider it an honor to contribute my themes to this project! I still have a LOT of work to do on them. And I need to make new ones for all the missing systems still.

My list of planned themes: Nintendo Entertainment System Super Nintendo Gameboy Gameboy Color Gameboy Advance Sega Master System Sega Genesis Sega Game Gear NeoGeo NeoGeo Pocket (Color) Sony Playstation MAME Default ES Theme Maybe others I've forgotten?

I plan to use the American releases of the consoles for theme inspiration. (Sorry Europe) I also intend to add a complete set of box art images for all the English games (even Europe only releases) on the systems. To avoid months of work, I plan to source most of these from existing HyperSpin art packs and then resize them to a maximum of 256 in any direction. (that is the box art size I've discovered works best) Also I plan to manually write all the description text using the original release game box blurbs (most are coming from Moby Games). Also Developed, Published, North America Release Date and Genre info too.

I plan to make a Default ES Theme as well. Just so if there are any more systems added in the future they won't be completely bare till I can make them a theme.

Lots of work ahead, and I can't wait to get started.

Aloshi commented 12 years ago

Let me know if there's any theming features you need (or if anything's broken)!

Before you get to serious work on the gamelist stuff, I'm going to add relative path operator expansion ("./") to gamelist.xml game paths and image paths. This way your gameslist.xml will work no matter where your ROMs are being loaded from (and you can already use "./" in theme image paths - you should use it if you're not already).

I'm kind of wondering if maybe I should be using checksums to identify games instead of file names. A goal for ES was to make it as easy to use as possible, so I'd like to just have people download a gamelist "pack", unzip it, and drop in their games. I'm not sure if this will be possible without a ton of work, though.

petrockblog commented 12 years ago

That sounds great! 1) I think a default theme is essential. This would allow users to include their "own" emulators without totally loosing a nice front end. 2) Specific themes for the emulator cores that can be installed with the RetroPie script would be really, really nice and save a lot of time of the users. For the beginning I will include the currently available themes from @Xevin in the next commit (hopefully during the next weekend). 3) Not reinventing the wheel and making use of already available art packs is a good idea! The cherry on the top would be a tiny detail that would allow the distinction between the HyperSpin art packs and your themes (really, just a thought, you are doing a great job anyway!) 4) Maybe I am missing something here, but is not ES-scaper doing all the collecting of the meta information? Could not the scraped data be put into downloadable archives? This would circumvent the need for manually editing text. 5) A MD5 checksum could do the job for automatically identifying the roms (as proposed by @Aloshi). If this checksum would also be used as file names, the drawback, however, would be that the readability for users is quite hard. I am not sure right now, which way I would prefer, though.

elpendor commented 12 years ago

I like the idea of packs per console (games info, boxarts, etc) BUT this should be considered:

1) ES should be modified first to identify games using checksum values. 2) All ROMs should be from goodsets, if possible. 3) Doing that by hand as @Xevin suggests, that's just crazy talk.

Then there's another issue: the data itself. Aloshi and I have been talking for a while yesterday and couldn't come up with a proper solution.

All I can think so far is using no-intro DATs (basically a dictionary of checksums/game names for each console) to build a skeleton file for each console. If the HyperSpin boxart packs have some reference to the checksums mentioned before, that could be merged as well. I also stumble upon some screenshot packs that can definitely be used with no-intro.

The only remaining part would be the game info. I couldn't find a usable source for that yet (HyperSpin has some of it in XML format). I thought about just scraping data using the base file I mentioned. It's gonna take a while but that's the only solution I have so far.

Xevin-zz commented 12 years ago
  1. The scrapper is very nice. I might use it for a starting point, but I'm slightly insane so I want to go over everything manually. Ok, so I'm completely insane...
  2. I would not suggest making a checksum detection of games. A couple of years ago I started collecting ROMs to make a complete collection for every system below the disc era of gaming. One thing I have learned in my journeys is that there is one "correct" version and hundreds of "altered" or modified ROMs out there. I used no-intro game list for ROM collection as its the most complete and thorough out there. I had to throw away tens of thousands of ROMs because either the size, CRC32, MD5, or SHA-1 did not match the list. It's just not practical for ES to use this to detect ROMs. Names, on the other hand, almost always followed the proper naming convention. e.g. "Star Fox (USA) (Rev 2).smc"

I also plan to release all my ROM collections eventually. I'm still hunting for about 150 ROMs after all these years...

Xevin-zz commented 12 years ago

HAH! I starting typing that response before you posted Elpendor. While I would never use a non-verified ROM, there are just SO many of them floating around these days. Most people aren't insane like me and just download what ever from emuparadise and get their game on. I figure ease of setup would be more important to most people.

If there is a checksum system implemented though +1 for no-intro lists

elpendor commented 12 years ago

I do agree with the checksum "issue", that's why I emphasized that all ROMs should come from goodsets. Everything is properly named there and there's no room for error. If it follows the convention, you know exactly what you get.

I don't think identifying them by name it's a good practice at all. Emuparadise happens to have properly named files but that's not the case with tons of other sites. Your approach would certainly involve some renaming (to match your version) or some preprocessing from ES (to compare how to close the current filename is to the original) at one point of the other. Maybe I'm getting this wrong but that kinda defeats the purpose of the whole thing.

The scraper is fine for a small number of ROMs (whatever their source) but if it's done for collections it has to be done right. Anything in between seems like overkill to me.

petrockblog commented 12 years ago

@Xevin: I just updated the RetroPie script and it includes your NES and SNES themes! You might want to have a look at the file structure that I used. The themes artwork is located in .emulationstation/themes/, the theme.xml files in their corresponding ROM directory.

fchagnon commented 12 years ago

Hey guys. Just jumped on the RetroPie wagon over the weekend. Love the active work being done on ES, especially around themes. Xevin's work, and list of desired features, will have ES putting premium frontends like Maximus Arcade to shame. :)

I'm working on a general post-apocalyptic looking theme inspired by the look and feel of the Fallout games. I'll share it when it's ready.

Observation about themes: I often switch between RCA and HDMI on my RPi, depending on where i am. This drastically changes the resolution, which has a major effect on how much screen real-estate things like box-art consume. So far I haven't seen an issue with the minimalist theme I have developed, nor any of Xevin's. I just forsee this potentially being an issue if folks right rich HD themes that just don't render on a lower-res RCA screen.

Aloshi commented 12 years ago

At the moment, box art is downscaled to about 45% of the screen width and the aspect ratio is kept in tact (if it's already smaller than 45% of the screen width, it isn't upscaled). If I remember right, resizing is done with a nearest-neighbor filter. If you've got a better idea, let me know - I put together the first idea I had. :)

Glad you like it!

Xevin-zz commented 12 years ago

I worked on themes for most of the weekend. I completed almost all of them now. Still have to do the ES Default Theme and TurboGrafx 16. Here is a link to download them. http://www.mediafire.com/?owii30r95us22sv

Before I began on the theming this weekend, I formatted my RPi and started over from scratch using the RetroPie script. Very nice. I wanted to get a look at how a clean install would be and its really come a long way. Good work everyone!!!

Some notes:

Those are the only things I can find wrong with ES now. Its almost done now and its really turning out awesome!!

fchagnon commented 12 years ago

I've got a theme that's almost done as well, and given my experiences I echo many of the aforementioned suggestions.

My theme, by the way, is taken from the default Maximus Arcade theme. It looks pretty slick so far. I'll package it up when I've finished all the console XMLs. (only have NES, SNES, GBA, Master System).

The other thing I'd really like to touch on is the hierarchy of the files. Perhaps I should so as Xevin has done and hit the reset button and see how a new build looks. But here's the hierarchy that is working well for me.

RetroPie/ +-------------themes/ +------------------------maximus/*.png +-------------roms/ +---------------------nes/themes.xml

I place all the pngs related to a theme in a sub-directory dedicated to the theme. This way the theme.xml file I place in each of the roms folders can point to a single place.

Ideally, centralizing the themes.xml files into a single folder should probably be considered.

FInal point -- sound: Probably not a top priority since both the SDL and ALSA sound drivers are still....lacking....on the Pi, but there should be "components" that define sound effects in themes.

I'm going to start digging through some old SDL programs I wrote back in school -- (10 years ago...). Maybe I can contribute this to the project.

Aloshi commented 12 years ago

Thanks for the lists, guys! I'll work on fixing things when I have time.

For starters, tonight I:

If you want to get your hands dirty, it'll probably be a bit complex because of how I have things set up. Thanks for the extremely brave offer! Some things you should probably know:

Don't feel bad if this scares you off! I'll definitely add audio eventually - I think it's very important for the experience.

Xevin-zz commented 12 years ago

Oh I forgot to say. When I ran RetroPie Setup it added the theme folders in .emulationstation but it didn't add the theme.xml files to the roms folders. So when I made these new themes I just did it in the old way I was doing it. (everything inside the roms folder) I plan to make a tweak pass on all the themes once all the theming stuff in ES is finalized and fix it to what ever hierarchy we settle on.

petrockblog commented 12 years ago

Thank you for this bug report!

Aloshi commented 12 years ago

Oh, one more thing @Xevin, can you give me a little more detail about the "random elements stop rendering" thing? Any particular setup that causes it (I haven't checked your new themes yet)? Are you sure it only happens with combinations of themes (it doesn't happen when it's just the theme itself)?

Xevin-zz commented 12 years ago

It seemed to happen as I made the themes. Things started slowing down and eventually pieces of previously working themes would render as white. I could get them to render properly by switching to another theme and then back. It felt like I was filling up the RAM or something. I think it started when I finished theme number 9 (playstation) and got progressively worse as I continued working on the themes. Luckily I only had 3 more to do at that point. larger elements seems to render as white more often then the smaller elements. The desc area of the gameboy advance theme in particular would fail to render most of the time. (I plan on tweaking/remaking the gba theme. It didn't turn out as well as I'd hoped) Try loading the themes folder I linked. It should happen for you too.

petrockblog commented 12 years ago

@Xevin: I forgot to say "great work" with the themes!

I will add these to the RetroPie script in the next days!

petrockblog commented 12 years ago

@Xevin: While adding the themes to script I found out that there seems to be a wrong theme.xml in the gamegear folder.

Which systems do you use with the "gb" and "ngpc" themes/roms?

Xevin-zz commented 12 years ago

LOL! I might have made a few mistakes... The Game Gear theme is nearly identical to the Genesis theme only different images and colors. So I just copied it over and made changes. I might have missed some things. I'll make sure I fix it on my end next time I work on the themes.

As far as the systems go. GB is gameboy (gambatte). I like my GB and GBC roms separate. ngpc is NeoGeo Pocket Color which doesn't have a system yet. I made it because I'm slightly crazy and didn't think to look if there was a system for it yet. Maybe in the future...

Aloshi commented 12 years ago

I was testing your themes, Xevin, on my RPi yesterday and I didn't have any of the whiteness/images-not-loading that you spoke of. I'm using the 192/64 split. It's also possible that my slight change to the OpenGL code fixed it.

I'm also thinking about how to theme the fast select box (and possibly the pause menu too). A simple background image would be easy, but not stretch well. Tiling wouldn't let you get the borders. So I think a special new definition will be in order...maybe something like:

<fastSelectBox>
<background>tiled/background/image.png</background>
<borderSideHorizontal>tiled/border/side.png</borderSideHorizontal>
<borderSideVertical>tiled/border/side.png</borderSideVertical>
<borderCorner>top/left/border/corner.png</borderCorner>
</fastSelectBox>

Where borderSideHorizontal will be tiled horizontally for the top and bottom borders, borderSideVertical tiled vertically for the left and right border, and borderCorner being the top-left corner, which is automatically rotated for the other 3 corners.

Is this too specific a definition? Not specific enough? Is this overkill? I'm not sure how other tools have you make a bordered rectangle.

One other thing - you should switch your themes to use relative paths (for image paths etc). I have my own user I use on my RPi, so my home directory isn't in /home/pi/, and my roms folder is in a different spot too; I'm sure some other people are the same. It's an easy (if a bit tedious) fix, just go through the theme.xmls and change /home/pi/roms/console/console_art/whatever.jpg to ./console_art/whatever.jpg. This way it'll work no matter where your roms/theme folder is. If you like I can upload the theme files I changed.

Xevin-zz commented 12 years ago

Yep I knew I was using absolute paths. Just being lazy. I plan to go through all the themes and fix a bunch of stuff once I get the look right.

As far as the the fast select box, what you describe makes perfect sense to me. And definitely use the same theme for the menu box. I think that you may need to add a margin (or padding) option too. For extra thick borders (that have a drop shadow for instance). Also text color option and selector color options.

Right now I'm really concentrating on the ES default theme. I'm spending a lot of time focusing on making it simple and generic, but not plain or boring. I made the decision that it would be a dark theme with bright lettering so it doesn't hurt anyone's night vision or appear overly distracting. I think I want the primary color to be red, but I wanted to ask you first. What color comes to mind when you think of EmulationStation?

Aloshi commented 12 years ago

I have absolutely no idea! I'm not an art person by any stretch of the imagination. I'm sure you already have a vision in your head of what you want it to look like - I never get such visions in terms of color or art, just in terms of functionality ("a column for art here, a column for games there"). I'll stick to the programming and let other people make things pretty. :)

Hopefully I'll get some time to work on those new theme tags this weekend. Things have been kind of hectic with midterms. With regards to the box art tags, do you guys want to be able to force its dimensions and positions (potentially breaking aspect ratio)?