Games Library (Game & Emulator database + launcher) development project, help wanted! - Printable Version
+- XBMC Community Forum (http://forum.xbmc.org)
+-- Forum: Development (/forumdisplay.php?fid=32)
+--- Forum: Development (/forumdisplay.php?fid=93)
+--- Thread: Games Library (Game & Emulator database + launcher) development project, help wanted! (/showthread.php?tid=40715)
Games Library (Game & Emulator database + launcher) development project, help wanted! - Awen - 2008-11-19 17:22
As an 'old' game programmer, I feel my duty to have a some sort of 'Game Museum' at home for my kids (and probably myself too), of course by using the most of my existing HTPC.
So I was a bit surprised not to find this in XBMC already, as the 'Xbox' is originally a game platform, not finding a strong support for 'Games' in XBMC available in the ports to other platforms. Is there perhaps any reason concerning (the lowest priority on) this one? Some architecture hazard preventing this? Or just an understandable lack of time and resources to work on this?
I reckon it's floating in the air (link to another related discussion therads), and I know that the Launcher Plugin can do some of this, but IMHO a tighter integration in XBMC could be much better.
So, the question is really this; is something like this already planned, somewhere by someone and can I assist?
As it's an itch topic for me I have begun developing some stuff related to this, for now as a 'contribution exercise'. Not sure how far it'll go, so far it's kinda plugged into the 'Program Window' in XBMC's GUI, mainly concerning emulators like for example MAME, but things should hopefully be usable for all later in 2009, either as a patch or as something more official, it all depends of the community interest around this. And/or the possible feelings of project managers and developers, hence this post
Cordially / Awen
- spiff - 2008-11-19 17:43
VERY welcome. only a havent-had-the-time-or-resources problem.
i had a system for this layed out in my head at one time. my idea was to build the equivalent of a library view for programs, with info being fed from python plugins. this allows much flexibility, minimizes the amount of development being done in c++ and, very importantly, it makes sure that you do things as general as possible.. but life caught up and i simply havent gotten the time these days to start on such a huge task (i know how much work this takes from building the video library..). well, rant over.
your work is very welcome. i'll gladly help with q's and such. if they get extensive i prefer irc..
- Rand Al Thor - 2008-11-19 18:20
Wow! This sounds great. I for one, and I am sure many others, would be very interested in a project like this. Much like spiff I have actually spent a fair amount of time puzzling over the best way to incorporate programs seamlessly into xbmc. While I have lots of great ideas, I am not a programming god like spiff That being said, if you would like any feedback/ideas/possible implementations please let me know. Cheers.
All ideas are welcome... - Awen - 2008-11-20 17:14
Of course, even if this 'Games' project is at its early stage: all of your ideas are utterly welcome. As i'm still struggling against various architecture deciphering (xbmc is a big chunk to swallow it's a perfect moment for synthesizing...
In a perfect world i'd to release often: something humble but workable as the 1st release, going richer and nicer with time.
Hence i'd like to build a list of 'core features' (implementing-the-current-'Launcher'-features-but-with-an-enhanced-user-experience, as a goal ?), but with the next 'feature rings' in mind, very early: to avoid major refactoring later on.
Some 'things', i have in mind right now, for a start:
1) separating the 'game' entities (and related informations) from the application used to launch them: it's mainly concerning rom and emulators, but as some apps are sharing rom files, i'd like to be able to run a particular game with various 'launchers' and option sets, and to avoid entries replication...
2) for a good user xperience, games database and relationships should be 'slacky':
[INDENT]2a) Like Mame is able to provide us a 'supported game list', it might be interesting to be able to reference them, even without any files on your harddisk. Of course GUI/and sources should reflect the availability status. [/INDENT]
[INDENT]2b) Going further, i'd like to add thumbnails/fanart/infos without rebuilding the whole database every days. The idea is to find the best balance between database building, and dynamic info retrieval (like thumbs)
<- Rand al Thor user experience here [/INDENT]
3) Scanning informations: Spiff is totally right, client/emulated games information comes from various sources: no 'igdb' actually... (fe mame is having 2 files concerning >4000 games, but for others it's a one-by-one situation). And Scanners should be ready to work with tons of romsets at once. A plugin architecture would be welcomed, of course.
'All for today... Pursuing the list when the dust will settle
- Rand Al Thor - 2008-11-20 20:44
Awen, it sounds like you have put a great deal of thought into the emulators section. Everything you have suggested so far seems great. Some of my ideas will add to that while others concern "programs" or "games" as opposed to "emulators"
First let me apologize as my coding skills are meager. So, if I suggest something that is impossible/impractical/plain silly please forgive me
As I see it the main concern with adding any of these features (games, programs, emulators) is seamless integration into xbmc. The launcher program, though very useful, breaks the "magic" of xbmc by launching everything in a new window. The user then sees the desktop and xbmc windowed showing that really these are two completely separate programs. The xbmc experience SHOULD give the illusion xbmc is an all inclusive program. You should never feel as if you are "leaving" xbmc. As you mentioned Awen of making a "game museum" arcade type machine, it would break the illusion of this ultimate gaming machine to see the computer desktop every time you start a new game.
The first big step would be to make all programs start "inside" xbmc. By this I mean that they do not launch an external window and would still be subject to the rules/controls of xbmc. Awen, if you have not tried the linksbrowser integration you should. It actually was quite well thought out. If I remember correctly, I think you could do the following with links browser.
Each program when launched should act the same as the movies or music section of xbmc. If you launch firefox you should be able to browse to any web page you like, then toggle back to xbmc's main menu while firefox continues to run. You could start some music, then toggle back to firefox and browse while listening to music. Then you should have an easy way of killing the program to return to the programs section. Launching a new program while another program is running should kill the first program before starting the next just like with movies and music. It will save system resources too to not have multiple programs running behind the scenes because you toggled away from them instead of actually killing them. There may be an exception to this rule which I will explain later.
Now that we have established the basics of how a program will run under xbmc, we come to what I consider the tricky part. Since there are many different types of programs from games to instant messengers that xbmc users might use we need to consider that fact that some of these programs use a considerable amount of buttons. Some of which might conflict with xbmc's current button mappings. For example "Tab" toggles the screen when playing a movie. However, in firefox it would be quite annoying if every time you tried to tab down to the next box it toggled the screen. See the issue?
My solution is to have settings for each program similar to plugin settings or some of the settings in the launcher plugin. These settings would be established each time a new program is added. We could either have a drop down that would give templates of common program types ie common settings for web browsers, games, other etc etc. Or just a list of what we consider to be the most common settings that would apply to any type of program.
For the above example of firefox there could be a setting labled "use alternate buttons." If this setting was checked then once a program was launched you would either:
A) use ctrl+tab or shift+tab (or whatever seems more logical, any combo would work) to toggle the screen and tab alone would still function the same as it normally would in programs. The same would apply for bringing up the player controls if music is playing etc etc.
B) use another very uncommon combination of buttons to bring up a pop-up menu that gives the option to toggle screen, quit program, bring up music controls, etc etc. If we decided something like this would be preferable then it might be just the default for all programs instead of a check box in program settings.
Another option that would be handy to have in program settings would be "enable mouse." Many programs do not need a mouse, emulators for example. I have my xbmc set to have the mouse disabled so that it doesn't get bumped and send my wrap lists spiraling out of control. However, a web-browser or newer games would require a mouse. Not really sure if that is something that would just appear when the program is launched or if it is something that xbmc would regulate. Just wanted to point it out. If we decided to go with option B from above for using a pop-up menu in programs for xbmc controls you might also integrate that in with the mouse, ie mousing over the bottom right hand corner of the screen brings up the pop-up. Again, this one is up for debate.
As I mentioned before, it would be nice to have music playing while answering emails or using an IM. However, if you are playing a video game with sound it would be a conflict of interest. A setting to "Enable XBMC Sounds" would be useful allowing you to continue listening to music when your program starts. Another option to consider along the same lines would be "Enable Program Sounds in XBMC." This would be a great option for an instant messenger. That way you could start your IM client and be doing other things. Then you would still be notified if you have a message.
Speaking of IM's, I know there has been mention of integrating one into xbmc. While it is a cool idea, it might also be like re-inventing the wheel. There are already quite a few really functional clients out there. If you could implement it as I have described above I don't see a need to spend the time and add the bloat to xbmc. The IM would be an example of a program that could have an option to "run as service" or something of that nature. Ie if you start it, it will continue to run even you start another program. You would then have to just click on it again to bring up it's gui. I could see this being handy for torrent clients as well. The only other issue I see with using a pre-existing IM client instead of an integrated client is that if you are watching a movie or listening to music it would be annoying to have a constant beep when a message arrives, but might also be annoying to miss an important message. A setting to "silence notifications during playback" would be perfect. That way if you are listening to music or watching a movie instead of a sound you could get a nice pop-up that you have a message. This might be trickier than it sounds from a coding standpoint since the IM client would not be a part of XBMC. It would have to have some way of knowing when a new message arrives. I will leave that to someone who is far better at coding than I am
So, these are the issues I see so far with adding programs to xbmc. Many programs will need different settings to make them functional without loosing the xbmc experience. I am sure there are a few other settings that might be helpful that I haven't thought of. Can anyone else think of any probable issues/conflicts I might be missing? As always these, are just thoughts. If you see merit in them, great! If not, I am more than happy to hear why. Sorry to have written a novel. Thank you to anyone who actually reads all this
minimizing glitches - Awen - 2008-11-22 16:21
@ Rand Al Thor
Your last post should be kept and used as a reference trough all this forum, as it's probably describing a big part of the 'my program' feature/problem list. You know, the forgotten one
As i'm only starting with xbmc, i dont want to speak on behalf of the project leaders, here My project for 'my games' is more like a proof of concept: i cant be definitive about the directions it will take.
Anyway, i definitely got your point about integration between xbmc and the rest of the world. But considering games applications, i'm pretty sure the integration will be somewhat limited, as generally a game needs to access every single bits of the hardware resources of your htpc: context switching is always rude. The guest OS should provide developers some 'stuff' to do that seamlessly - it does this for sound fe - but for graphic or input devices, it's generally an 'all or nothing' situation.
So, the 'best' integration solution would be to bloat xbmc with every possible pieces of, say, emulation code to guarantee a continuous firm grasp on hardware, therefore allowing smooth interfaces and transitions. But this is terribly huge task (Did someone already play with Mame code ?)... For some other application types (Instant Messaging): it's the only possible way, but to be broader, would be at the cost of a stronger(?) plugin development framework inside xbmc (Is something as such already defined for 'My Programs' ?).
Anyway, if we're sticking with your 'best possible integration' request, but still launching external application: i'm confident in finding *some* solutions to switch gracefully between strong external app contexts. IIRC, the GameEx front-end (win32) is having some dark/black window standing ready behind the main app window, to hide OS background during an external application launch... Fading in main application graphics and sounds... Building 'on the fly' xml joystick configuration for mame...
Any idea to minimize user experience 'glitches' is welcomed.
- EMK0 - 2008-11-22 16:57
http://aruantec.ngemu.com/video.html is that full integration in an app? is this possible with xbmc? if not gameex method is still fine.
- Rand Al Thor - 2008-11-22 22:45
Awen Wrote:@ Rand Al Thor
This is actually exactly what I was talking about. I must not have been clear enough Even if we ARE launching external applications (which I would assume would be the easiest way of integrating a majority of apps) we just need to give the illusion that we are not ie. No visible extra windows and no visible peeks at the desktop. I guess I should have stated that above. Anyway, what you suggested sounds like a great solution. I know my proposals above were far beyond what you had discussed in you project but I thought it might be nice to lay down a basic concept for what the final solution could be. That way as you said before, you or others could add a little at a time until the project has reached it's "final" goal. Cheers and thanks for reading my overly wordy posts.
- chucky08016 - 2008-11-23 01:30
How about intergrating a frontend like Maximus Arcade?
I know that you have to pay for use but it's a great frontend and it supports ALOT of emulators.
Take a look...
- Awen - 2008-11-23 22:34
@EMK0: promising app. crashing a lot at this stage, but still, exciting. Apparently a lot of efforts spent into the 'ease of use' field. Nice example.
@chucky08016: integrating the whole maximo ? if maximo developer is willing to do this, well, it could spare my time But i'm pretty sure he wont, as he's selling it, it's closed source, etc
I did twice of those interfaces by myself... All i propose is to spend my energy in a another iteration, but inside xbmc. Because it's multi-platform, neat, fast, and some others are making it 'looking' awesome. xbmc is, amha, my best user experience so far concerning htpc. One way or another, someone is going to implement games support, maybe not as extensively as other specialized apps, but well, with a better integration with the rest, so i'm pretty sure it's worth the effort.