--
You received this message because you are subscribed to the Google Groups "Cabrio FE Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cabrio-fe-de...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
While you're correct that the move to C++ is pretty much a rewrite, it wasn't that much of a headache considering the naming conventions used within the C calls. It made conversion to a class-based architecture really simple.
Getting to your bullets:
* Whether to keep the XML configuration files or dump them for something else.
* Possibly using an SQL database for game lists, etc.-- While I'm normally in favor of a relational database so that we can do assorted queries (e.g. "Show me all genesis fighting games"), that makes things trickier for an end user. It would also mean more up-front development to ease that burden of importing and updating data. Another plus is that we could "stream" data by getting a 100 titles and corresponding imagery at a time, instead of an educated guesstimate of where the user will be in their list (read: less brute force import, less overall memory footprint).
* Configuration from within the GUI (optional, protected by password/PIN).-- To do this we need to 'settle' on a few common actions. The way we want transitions to behave between main and sub lists; the way we want the main list to behave between selections; the way we want the sub-list to behave; etc...
* Custom events/actions for games.-- Are you meaning something like the "themes" for Hyperspin? e.g. a custom backdrop with some animations for the "Fighter" list, which is separate from the "Driving" List?
-- I'd normally be up for this too, considering a lot of development seems based on "make the HUD 30% of total screen height". Thought setting "absolute" to (850x, 630y) will push offscreen for 800x600. In other words, we'll need to get really good about boundary checking.* Redoing themes properly, with absolute offsets for everything.
* Arbitrary number of images per game (box, cabinet, control panel, etc.)-- This could be done with a database or similar. Hyperspin limits to 5. Commonly the screenshot, cover art, cartridge, game logo, and movie.
* Game ratings (0-5 stars or similar).-- This strongly hints at using a database, or maybe pulling from some web database like metacritic?-- This puts a big burden on either the user, or some wget/sed hackery.
* Displaying misc. game info text (synopsis, review stars, etc).
* Attract mode (randomly flip though games at idle).-- This would be really simple to do. We'll need to make sure we have some "attract mode" settings, such as how long to dwell, volume for sounds, etc...
-- This I think ties into themes and "custom actions/events". Take a look at the different "wheel" settings for Hyperspin. There are settings for how "big the circle is" (size of the on-screen arc, including "vertical"), which side of the screen it's on, how big the icons/fonts are, and the offset from the screen. I think we can take that a step further and have an alpha-numeric grid as part of the drill-down to games.* Background pan and zoom.
As an aside, I used Hyperspin on my arcade cabinet before I finally decided I was sick of dealing with Windows. One of my biggest gripes was when I had a MAME or SNES list of over about 75 games, it became a pain in the ass to find the one I wanted. Hyperspin would also crash if an individual game list (it stores systems in an xml, and each system's game list in a separate xml) got over roughly 200 or 250, it would just crash. It made me have to focus on the "top games" instead of a full arcade in one box.
If you guys give the thumbs up, I can begin porting to C++ and OGRE pretty quickly. At least the first crack at it, I'm no OGRE expert, but could get something functional.
this would be amazing........if you need testers or anything I would be happy to help....particularly with the GLES portions (which I personally feel should be your primary concern.....not only out of personal need, but also because alot of people have been wanting cabrio on the arm boards without using glshim)......just google around and you'll see that I was actually the first person to even get it running on the pi (let alone any arm board)
so if you make a testing branch on git and at least start on the gles conversion i would be happy to test and debug for you (at least on the pi and the cubieboard)
other ideas would be to use something like the locations tag to set predefined rom, logo, screenshot, background, and video folders for specific emulators and roms
and as far as dealing with large lists, I would recomend using what emulationstation does and switch to a quickscroll after holding the up/down button for x amount of seconds
as far as I know the, the metadata scraper in ES is done primarily during the initial configuration of the system (not "on-the-fly"). so the loading speed shouldn’t be an issue in a final/preconfigured system.
--
* Whether to keep the XML configuration files or dump them for something else.
* Possibly using an SQL database for game lists, etc.
* Configuration from within the GUI (optional, protected by password/PIN).
* Custom events/actions for games.
* Arbitrary number of images per game (box, cabinet, control panel, etc.)
* Game ratings (0-5 stars or similar).
* Displaying misc. game info text (synopsis, review stars, etc).
* Attract mode (randomly flip though games at idle).
Yeah, that's what I'd expect. The performance doubts I have are simply about loading the title/logo images from disk (or SD, or whatever) quickly enough when scrolling at high speed.
Considering my earlier post on the Google group, this might be the correct thread for me to step in on. Having written my own Linux front-end in the past (MAMEd for those with a really long memory), and having recently updated that so that it would also support MESS (local code only) I figure I might consider spending my time on Cabrio FE in stead rather than porting all its cool features to my own front-end. Both are intended for the same purpose after all (Arcade machine control rather than mouse control like MAME32UI), so there really isn't much sense in doing the same things separately. Besides: Cabrio FE already looks much cooler. :) My C/C++ is a bit rusty, but I should be able to be of some help here, though I'll have to start by analyzing the Cabrio FE code to get a good idea of its structure first.
Steve, could you give any insight into the coding process you have in mind? Assuming more developers would be interested to work on this, how would you like to streamline this process?
Since you're looking at a rewrite based on new libraries, setting up a feature list and code/file structure first would probably be a good idea.* Whether to keep the XML configuration files or dump them for something else.
XML configuration has its advantages; I currently use the MAME/MESS output internally in my code to create gaming lists, but there's no reason not to write some small tools to automatically create XML files for Cabrio FE in stead. Does Cabrio filter the gaming list in any way, like check whether the games are actually available before showing them?
I would consider separating the paths and element types (screenshot, titleshot, etc.) from the actual game list. I believe people generally keep them separated by system (also to prevent overlap of the same game name on multiple systems), so perhaps a fixed directory structure per system would make sense?
* Possibly using an SQL database for game lists, etc.
This would probably make it hard for the end-user, and I'm not sure if it's not a bit of overkill. Automatic generation of game lists would help though.
* Configuration from within the GUI (optional, protected by password/PIN).
Probably a good thing, though I wouldn't give this the highest priority.
* Custom events/actions for games.
Could you give some specific examples of this?
* Arbitrary number of images per game (box, cabinet, control panel, etc.)
I'd consider showing the different elements in order of definition within the defined skin. That way you can create any number of elements, including box, cabinet, control panel, title shot, screen shot, etc., and have them overlap (with transparency) in any way you want to.
* Game ratings (0-5 stars or similar).
I'd skip this, but being able to add games to a favourites category with filter (only showing favourite games) would be helpful.
* Displaying misc. game info text (synopsis, review stars, etc).
Some of this can be extracted from the emulators; others would have to be downloaded from the internet. There are a few front-ends out there that do this automatically, so it might be of interest to have a look at those?
* Attract mode (randomly flip though games at idle).
Sounds like a screen-saver mode; would probably be nice to have.
I agree we do need some sort of feature list. Github does bug tracking, but
we may consider using something like RedMine to actually manage the project.
It's early for me and I haven't even had my coffee yet, but I did want to toss
my $0.02 in.
Joseph,
We all understand the time problem; I have a full time job and family as well. :) I'm currently still busy getting my arcade setup to function the way I want it too anyway, but I'll have a look at OGRE3D in the mean time to get familiar with its syntax. I'd love to have a look at your code when it's functional. I also should have a look at the repository systems currently in use, since I'm not familiar with any of them. We're using different systems here at work, and I never needed any for my own front-end, since it was a one-man job.
I also need to have a closer look at Cabrio FE's current feature list (is it written down anywhere?). I've got a base system up and running at the moment, but I don't yet know its limitations. To give you an idea of the features I'm looking for:
Automated game list generation; for Cabrio FE we should perhaps write a few small tools to generate them, and provide the XML files to users. Since these lists will contain all supported games, Cabrio FE should support a filter that only shows those games that are actually available. Does it already have such a filter?
The ability to place a game in a favourites list, and only show those games that are in the favourites list. This way a user doesn't need to scroll through all the supported games to find the one he/she's looking for. Does Cabrio FE already support something like that?
I need to delve a bit deeper into the skinning as well; I'm not yet familiar with all the Cabrio FE options to that regard. Being able to show either a video or a snapshot, depending on what's available, would probably be nice. For the rest, I think the skin should allow any number of elements to be placed with a defined ordering for overlapping. As said: I need to have a look at how it's currently working before commenting on any additional features.
A quick way to work through large lists. As written above: I currently use x10, x100, and x1000 buttons, but I'm open to alternative suggestions. Reading in large lists can also take a long time; I once auto generated a complete MESS list, and ended up with almost 2000 supported systems, and 600k supported games, which took about 20s just to read into the program...
I'd also love to see a complete Linux distribution for Cabrio FE, possibly with support for XBMC as well. I currently have something like that set up on my HTPC (well, with my own front-end in stead of Cabrio FE for now), and thought it would be nice to offer users a complete live USB solution with the possibility of installing it on a HD/SSD.
All,
I'm not sure if this should be discussed on a Google group or if we should create a developer's mailing list (if Steve's interested of course)?
Some feature proposals, assuming we start with a clean development for version 2 (not necessarily backwards compatible):
- State configuration split between static and dynamic; the last saved as save action or autosave.
- XML emulator game lists generated by added tools.
- Filter on available, mature, clone, verified, ...?
- Selectable favourites lists (multiple for multiple users)?
- Skins using elements; overlapping via Z-axis or fixed order?
- Element types: game name, genre, manufacturer, screenshot, titleshot, marquee, cabinet/game system, flyer, control panel, video, ...?
- Element parameters: x, y, z, x-rotation, y-rotation, z-rotation, width, height, transparency, animation, font, ...?
- Distribution: source code, package, installable live CD/DVD/USB, ...?
Some questions:
- Should we search for graphics artists to create new skins and/or graphics or do we point towards available packages on the internet?
- Which emulators do we wish to provide XML game lists for? MAME and MESS can do this (almost) automatically, but what support do other emulators offer?
- Should we set up repositories, mailing-list(s), ...? Steve, do you have download limitations on your website?
- Should we (also) use torrents for distribution?
The solution that comes to mind for me is to minimize the overhead by tying in on of my ideas in the "2.0" thread. Have a default 'font' and background for a particular system. Think a rectangle of the red stripes for Genesis, with a distinctly Genesis font. I would think this would work well for the fast scan, since at most you're looking at roughly 60 small-ish images that can be reused for lettering, plus another simple image for the game "logo" background. When doing a fast scan, no movies or screenshots show up. After stopping for some determined time (e.g. 1 or 2 seconds), we figure out what is drawn on-screen and load the appropriate imagery. I believe some of this can be done by Ogre3D automagically, but will have to investigate once I get there. I have been able to get font and flat imagery loaded in Ogre3D before... dynamic resource management may be interesting.
That's basically what Cabrio FE is already doing at the moment, isn't it? Show the static as screenshot/video until game rotation has stopped. What would you consider an acceptable scrolling speed?
In my current code, I manage about 3-5 games per second at 1920x1080, and loading all fixed images on boot (e.g. background), and all dynamic images (screenshot, titleshot, cabinet) on scroll. Cabrio FE does something similar on my system: 4-5 games per second, though I'm not sure if it's internally slowed down or if that's the maximum it can handle.
In my old code, I was at about 15-20 games per second at 1024x768, and showing only the screenshots. I haven't figured out which part of this slowdown is due to new scaling functions, screen size increase, and number of images displayed. It would be interesting to see what impact the Ogre3D library will have.
Speaking of images, and especially when it comes to game skin images (like the wheel): do we leave it up to the user, make our own (we'd need a community for that), or should we get in touch with the repository owners like the Hyperspin community? I remember that Steve had a discussion about this on their forum once, since some developers thought he had taken their images for his demo's, but since they were his own that was resolved peacefully. Since they're not interested in developing a Linux version they may be open to the idea as long as proper recognition is given, but we'd have to wait and see. It's difficult enough to get all the resources together for a properly installed system; they're spread out over multiple sites IF you even know where to look.
With regards to the game lists: my little test showed me it's rather simple to create a full game list for at least MAME and MESS; I could write one or two small separate tools in C++ to write them out as soon as we've decided what information should be stored in there. Still provided that Steve's interested of course; it makes little sense to define anything without his input and decision. :)
I'd love to take a look at your Ogre3D code though; I've taken a quick look at the website, but it's an extensive library to use, and I for one don't use a very fast system for my Arcade setup. Speed would depend on the chosen skin of course.
On 28 September 2014 08:39, Pieter Hulshoff <phuls...@gmail.com> wrote:That's basically what Cabrio FE is already doing at the moment, isn't it? Show the static as screenshot/video until game rotation has stopped. What would you consider an acceptable scrolling speed?Right now it's really crude but works well at modest scrolling speeds. Basically everything is loaded (and freed) on the fly and in most situations that's enough.
I think it's important to have a look at features and ambitions before deciding upon a library. If we want to do anything 3D, then just SDL is out of the question; SDL + OPENGL could be used (like it is now). If our ambitions go a bit beyond that, then Ogre3D may not be such a bad option considering what I've read about it so far. Sure, it's not that easy to step into, but at least it's not likely to leave us hanging if we grow more feature ambitious either.
I do however find it unlikely that the three of us will build something that's feature comparable to Hyperspin; that's a huge program that will require more developers. We may want to consider some compatibility towards it though.
From features we should probably take a look at class structures and file structures, and one of us should build a simple code base on that; I don't think it's easy to write a code base with multiple coders at this time. Individual features could afterwards be added by any of us.
Considering that I've already written some code for MAME/MESS output parsing I figure I'll spend some time writing a tool that will generate the XML game lists for all supported systems. Users can then decide which systems they want to include. I would suggest filtering such lists on available games before printing though; this could be done on front-end startup (adding a sorting algorithm is a good feature too). I'll make a proposal for a file format as well.
Steve, could you write down your current views on the skinning so I can compare it to what I have in mind?
I propose to load images etc. on the fly until we figure out a way to properly cache this information. It's the easiest solution while still being able to maintain large game lists. I figure most users will want to be able to use a full MAME set at least (I know I do, and then some (NES, SNES, MSX, Megadrive, etc.)), and that took me 5 minutes to load with the current version.
With regards to configuration: I consider anything that can be changed from within the front-end dynamic, and everything that is not would be static. File lists would be static, while favourites list(s?) would be dynamic. Other dynamic information might be: last game played (for each system?), last system played, etc. That way the next boot will bring you exactly where you were when you left. Since not all users want that, such state information saving should be optional.
As Joseph says, we really don't need very much. As long as we can put images on the screen and manipulate them, the rest is all "regular" coding. The big advantage of using an existing 3D engine/library is that it would abstract away the tricky OpenGL stuff and offer an easy path to supporting multiple platforms.
No, we probably won't reach that level of features, at least not any time soon. Some compatibility with HS would be cool, e.g. reusing themes or stuff like that. Or we could offer conversion/import tools.
Sounds cool. Maybe your tool(s) could output the existing Cabrio format too? You could also do filtering in the tool, that would help a quick start-up.
Will do, I just need to sit down and describe it some time. I'll try and get it done this week.
As Joseph says, we really don't need very much. As long as we can put images on the screen and manipulate them, the rest is all "regular" coding. The big advantage of using an existing 3D engine/library is that it would abstract away the tricky OpenGL stuff and offer an easy path to supporting multiple platforms.
Ok, a more fundamental question is then: do we need 3D object manipulation or would SDL be sufficient? I couldn't find much in the Cabrio and HS themes that requires 3D; merely 2D scaling and rotation. What type of features are we looking at that would require 3D? Joseph, what's your status on the Ogre3D conversion?
No, we probably won't reach that level of features, at least not any time soon. Some compatibility with HS would be cool, e.g. reusing themes or stuff like that. Or we could offer conversion/import tools.
From what I could find, HS has a very specific theme setup, using multiple fixed layers. Every game though can have its own mini theme as to how it's presented. The wheel spins until it stops, and is then pushed back while the game theme kicks in. HS has a huge community that builds these themes and artwork. Converting them would require permission from the individual theme designers, and compatibility would require users to get their own themes from the HS repositories. I'm not sure what their policy is regarding such compatibility.
Sounds cool. Maybe your tool(s) could output the existing Cabrio format too? You could also do filtering in the tool, that would help a quick start-up.
Sure, that would be no problem at all. We do need to fix that XML loading though. Is libxml really that slow? I used some simple C++ string parsing myself; nothing nearly as sophisticated as XML validation, but it loads a full MAME list in a fraction of a second.
Will do, I just need to sit down and describe it some time. I'll try and get it done this week.
Sounds good; perhaps you could also take a look at the HS themes to see how that matches your views?
I thought 3D object manipulation would be a cool feature, though I don't really know how useful it would be beyond eye candy. My thought was to be able to incorporate some 3D models into it. Maybe have a theme that is a real arcade, complete with a couple flickering lights. That sort of thing.
Looking at the XML code I pulled from GIT, libXML doesn't have much stake in it. There's manual string tokenization and comparison to a slew of #define statements. While we may consider moving that workload off to some other library, the problem still remains that for a full MAME set (including duplicates and such), you're looking at thousands of titles. Mamedb.com says there are 6326 good games with clones... include preliminary and it balloons to 18,382. That is a lot of linkage to keep in memory. Hyperspin barfs over roughly 100 items in a list, so we can certainly outdo that.Sure, that would be no problem at all. We do need to fix that XML loading though. Is libxml really that slow? I used some simple C++ string parsing myself; nothing nearly as sophisticated as XML validation, but it loads a full MAME list in a fraction of a second.
Lets put some thought into how to minimize the overhead. There is one rule that comes to mind from my web dev days, "it shouldn't take more than 3 clicks to find what you want". Lets see if we can apply that to a drill down list. System/Genre/StartingLetter is 3. I'm sure there are others.
Also, Hyperspin has separate XML files for separate systems. It's an XML file hierarchy. A main that defines the "systems" with emulators. Then "system" xml's that define the game list and attributes. The latter of which can be generated in CLRMamePro. I vote we make ourselves comfortable with that format, it's the gold standard as far as I can tell. It would ease any conversion pain from prospective users as well.
While I used Hyperspin on my cabinet while it was running Windows, I still wasn't overly impressed by it. Some complaints:
1) It maintained a static background
2) Limited to 3 "extra" images (box art, cartridge, +1)
3) "themed" the wheel based on a game list and matching titles
4) Movies could be downloaded, but the titles MUST match EXACTLY (none of this (! T+Eng) bullshit).
5) The font choices sucked, color choices sucked worse
6) The "wheel" was pretty limited, you could make it straight up and down, or adjust the "radius" of the circle it sat on... as well as a limited +/- offset. In addition, wheel images had to be a particular size, or they just looked miserable and overlapped. There was no "highlight" of the current one.
7) Extra animations were in a weird adobe flash format.
8) It was frustrating to find themes that worked together. I might like an NES theme that has some of the 8-bit nostalgia going for it, but if the placement of all the images is completely off from the rest I'm using, it creates a harsh transition for a user.
That might actually be a good thing, instead of a dozen different themes, we define a top-level structure that ALL systems adhere to. They just select different "background=" and such. What do you guys think?
--
You received this message because you are subscribed to the Google Groups "Cabrio FE Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cabrio-fe-de...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Question with regards to the game list: what exactly does Cabrio use the rom-image parameter for and how? Should it contain the ROM extension, like .7z or .zip or is the extension stripped, and the name used to find the matching video/snapshot/....?
Get ready... my brain is functioning again and this is a lengthy response.
On 9/30/2014 9:48 AM, Pieter Hulshoff wrote:
I thought 3D object manipulation would be a cool feature, though I don't really know how useful it would be beyond eye candy. My thought was to be able to incorporate some 3D models into it. Maybe have a theme that is a real arcade, complete with a couple flickering lights. That sort of thing.As Joseph says, we really don't need very much. As long as we can put images on the screen and manipulate them, the rest is all "regular" coding. The big advantage of using an existing 3D engine/library is that it would abstract away the tricky OpenGL stuff and offer an easy path to supporting multiple platforms.
Ok, a more fundamental question is then: do we need 3D object manipulation or would SDL be sufficient? I couldn't find much in the Cabrio and HS themes that requires 3D; merely 2D scaling and rotation. What type of features are we looking at that would require 3D? Joseph, what's your status on the Ogre3D conversion?
I've been sick for the past 3 days or so and my brain hasn't been able to function beyond "hungry" or "sleepy". Thinking more about it, a C++ minimalist conversion wouldn't do terribly well with OGRE... the "libogremain" is on the order of 18MB. And while it does offer some built in resource handling (see http://www.ogre3d.org/docs/api/1.9/group___resources.html), it's intended for more robust visualization than we currently need.
Looking again at SDL (http://libsdl.org/), it interfaces with built-in OpenGL or Direct3D libraries. It's a smaller layer that we could build on. I have developed a bit in SDL as well, as I was trying to get simplistic games running. It shouldn't take terribly long for anyone to pick up.
I just propose as we go toward a C++ implementation, we do so in a very logical way, and each class only performs one job. e.g.:
1) ConfigParser
2) DisplayManager
3) InputManager
4) EmulatorList
5) RomList
6) ImageList
7) MovieList
8) ConfigManager (Parser can go away if we have an XML library we link in here)
Or something to that effect.
No, we probably won't reach that level of features, at least not any time soon. Some compatibility with HS would be cool, e.g. reusing themes or stuff like that. Or we could offer conversion/import tools.
From what I could find, HS has a very specific theme setup, using multiple fixed layers. Every game though can have its own mini theme as to how it's presented. The wheel spins until it stops, and is then pushed back while the game theme kicks in. HS has a huge community that builds these themes and artwork. Converting them would require permission from the individual theme designers, and compatibility would require users to get their own themes from the HS repositories. I'm not sure what their policy is regarding such compatibility.
Themes in HyperSpin have to be specific, otherwise a static parser would barf and you'd get seg faults. All they are is a folder/zip file, an xml file, and a series of images (PNG and GIF for transparency). I doubt there would need to be any "conversion" for a theme itself, though it would definitely be in good taste to get in touch with their community. Their WYSIWYG editor is "okay", I found it cumbersome to use and downright infuriating to get to work right. It crashed. A lot.
Looking at the XML code I pulled from GIT, libXML doesn't have much stake in it. There's manual string tokenization and comparison to a slew of #define statements. While we may consider moving that workload off to some other library, the problem still remains that for a full MAME set (including duplicates and such), you're looking at thousands of titles. Mamedb.com says there are 6326 good games with clones... include preliminary and it balloons to 18,382. That is a lot of linkage to keep in memory. Hyperspin barfs over roughly 100 items in a list, so we can certainly outdo that.Sounds cool. Maybe your tool(s) could output the existing Cabrio format too? You could also do filtering in the tool, that would help a quick start-up.
Sure, that would be no problem at all. We do need to fix that XML loading though. Is libxml really that slow? I used some simple C++ string parsing myself; nothing nearly as sophisticated as XML validation, but it loads a full MAME list in a fraction of a second.
Lets put some thought into how to minimize the overhead. There is one rule that comes to mind from my web dev days, "it shouldn't take more than 3 clicks to find what you want". Lets see if we can apply that to a drill down list. System/Genre/StartingLetter is 3. I'm sure there are others.
Also, Hyperspin has separate XML files for separate systems. It's an XML file hierarchy. A main that defines the "systems" with emulators. Then "system" xml's that define the game list and attributes. The latter of which can be generated in CLRMamePro. I vote we make ourselves comfortable with that format, it's the gold standard as far as I can tell. It would ease any conversion pain from prospective users as well.
While I used Hyperspin on my cabinet while it was running Windows, I still wasn't overly impressed by it. Some complaints:Will do, I just need to sit down and describe it some time. I'll try and get it done this week.
Sounds good; perhaps you could also take a look at the HS themes to see how that matches your views?
1) It maintained a static background
2) Limited to 3 "extra" images (box art, cartridge, +1)
3) "themed" the wheel based on a game list and matching titles
4) Movies could be downloaded, but the titles MUST match EXACTLY (none of this (! T+Eng) bullshit).
5) The font choices sucked, color choices sucked worse
6) The "wheel" was pretty limited, you could make it straight up and down, or adjust the "radius" of the circle it sat on... as well as a limited +/- offset. In addition, wheel images had to be a particular size, or they just looked miserable and overlapped. There was no "highlight" of the current one.
7) Extra animations were in a weird adobe flash format.
8) It was frustrating to find themes that worked together. I might like an NES theme that has some of the 8-bit nostalgia going for it, but if the placement of all the images is completely off from the rest I'm using, it creates a harsh transition for a user.
I think we can do much better. We can support timed fade backgrounds much like selecting a folder for wallpapers in windows. Better transitions between themes (instead of everybody out, black screen, everybody in). We can support more imagery. We can do themes for systems/genres/games as well (though I think games are overkill... who wants to create 16k themes for MAME?). We can bundle a couple open fonts, then allow the user to select their own if they choose. We can allow a default "background" for a game title with the theme, to make it more uniform if the image doesn't exist. We can do many different transitions, such as a Playstation like bar drill-down (left-right selects system, down to get to a game select). We can do a Steam-like grid, with a custom font I imagine we could have "A - D" and "E - L" to help with the selection. Yes, handling different theme "types" means a bit more coding, but the underlying imagery and themes don't necessarily have to change that much. The user can define a "wheel.xml", a "grid.xml" or a "bar.xml", and make that selection in the primary "cabrio.xml" file.
That might actually be a good thing, instead of a dozen different themes, we define a top-level structure that ALL systems adhere to. They just select different "background=" and such. What do you guys think?
--
My schedule recently became more open, so I'm going to get cranking on the C++ conversion hopefully soon. At near 2500 lines, that config.c is just plain unwieldy.
Gentlemen,
I believe we have some decisions to make with regards to features:
I've been very impressed with the HS community results when it comes to art (wheel/systems/etc.). I'd love to work together with them to share as much work as possible, even though we'll define our own set of features.
1. Do we follow the HS two-step selection of system -> game, do we use a three-step approach of system->genre->game (only automatic XML file generation possible for MAME at the moment; we'd need catver information for the other systems or do it by hand), or do we come up with a new approach (I use one direction for game selection and another for system selection in my latest code)?
2. Should genre selection be a part of game selection, or should it be an intermediate step? This goes into the heart of the class definition of course: is genre simply a separate system XML file with games, or is it a part of the game definition?
3. I would prefer a fixed directory structure; possibly the same as HS to allow us to share as much code/art/themes as possible. This will make Cabrio much simpler to set up, and it will make debugging user problems a lot simpler as well. Obviously we'll lack some of HS's feature, and perhaps have some they lack (like only showing available games for instance).
4. In fact: I'd like that to be the default: only show the games actually on the system. That way all systems can be in the systems.xml file, and the game XML files for all supported system can be present as well. It doesn't take much room, but it makes adding new systems much easier for the user, simply by adding the corresponding ROM and art files.
5. I would like these files to be a part of the standard directory structure; not a part of a $HOME/.cabrio directory. This way we can distribute packed directory structures with files (possibly as torrent) to allow users to quickly set up their environment.
6. Hopefully we can get permission from HS and Emumovies to do the same for their files, but if not I'll write some tools to automate the installation process after users download the files from their servers using membership there. Obviously we'll add our own art/themes to the process.
7. We need to have a look at file detection. I think identification should be based on:
1. file name
2. full name
3. cloneof file name
4. cloneof full name
This should cover most naming systems used by the available repositories.
8. As far as I can tell, the HS game XML files already cover all fields we're interested in. If we were to re-use their format we could share the results of our work with them, and contribute to their community like we benefit from theirs.
9. Is the fork call to MAME/MESS really taking up that much memory (and not freed perhaps?)? I used system calls in the past, which probably have their own problems, and I don't know which system works better.
Let me know what you think. I'll post more if thoughts pop up. :) If we agree that the current XML parsing takes up too much time, and we've decided on file formats and class definitions, I could write the file I/O functions. It would save me some time if I don't have to delve into the OPENGL functionality at this time, have one of you handle that, and make myself useful by writing supporting functions and tools. :) If you could send me an email I could send you some intermediate results as soon as they come available.
The idea was (IIRC, this is a while ago now) that matching would be done on the "platform" tag. I.e. give both the game and the emulator a platform tag with the same value and it should match the up. Whether it actually works like that is however anyone's guess ;)
On 6 October 2014 15:25, Pieter Hulshoff <phuls...@gmail.com> wrote:Gentlemen,
I believe we have some decisions to make with regards to features:
I've been very impressed with the HS community results when it comes to art (wheel/systems/etc.). I'd love to work together with them to share as much work as possible, even though we'll define our own set of features.This is kind of a key thing. We need to allow reuse but not allow ourselves to be limited by other similar projects.
1. Do we follow the HS two-step selection of system -> game, do we use a three-step approach of system->genre->game (only automatic XML file generation possible for MAME at the moment; we'd need catver information for the other systems or do it by hand), or do we come up with a new approach (I use one direction for game selection and another for system selection in my latest code)?I honestly think we should allow all of these options, somehow. There are so many different ways people want to set up their cabs; some just have one list of arcade games, others want different systems/emulators, others want a complete compendium of every video game ever made ;)
4. In fact: I'd like that to be the default: only show the games actually on the system. That way all systems can be in the systems.xml file, and the game XML files for all supported system can be present as well. It doesn't take much room, but it makes adding new systems much easier for the user, simply by adding the corresponding ROM and art files.Sure, we could do this. This would allow people to publish their complete lists and others to reuse them, even if they don't have all the games. I'm not completely sold on it being the default though, it depends on what the user is expecting and you don't want to go silently dropping things if the use thinks they're meant to be there.
5. I would like these files to be a part of the standard directory structure; not a part of a $HOME/.cabrio directory. This way we can distribute packed directory structures with files (possibly as torrent) to allow users to quickly set up their environment.If the data is truly authoritative it can go in /usr/share (or wherever) for sure. It should be possible to override/supplement at the user level too though.
6. Hopefully we can get permission from HS and Emumovies to do the same for their files, but if not I'll write some tools to automate the installation process after users download the files from their servers using membership there. Obviously we'll add our own art/themes to the process.It might be tricky to strike the right deals but making it easier to use external resources would indeed be a huge plus.
7. We need to have a look at file detection. I think identification should be based on:
1. file name
2. full name
3. cloneof file name
4. cloneof full name
This should cover most naming systems used by the available repositories.I have a suspicious feeling this is really difficult to do well. I also rather expect someone's had a good crack at it though and we can probably find some open source solution.
Let me know what you think. I'll post more if thoughts pop up. :) If we agree that the current XML parsing takes up too much time, and we've decided on file formats and class definitions, I could write the file I/O functions. It would save me some time if I don't have to delve into the OPENGL functionality at this time, have one of you handle that, and make myself useful by writing supporting functions and tools. :) If you could send me an email I could send you some intermediate results as soon as they come available.Cool. I think we need to look at why the list reading stuff is slow right now. It could also be that the XML part is fine but the delay comes from the rather simplistic way the list is built, e.g. it's also sorted just by walking though the whole list until the right spot is found.
1. Do we follow the HS two-step selection of system -> game, do we use a three-step approach of system->genre->game (only automatic XML file generation possible for MAME at the moment; we'd need catver information for the other systems or do it by hand), or do we come up with a new approach (I use one direction for game selection and another for system selection in my latest code)?I honestly think we should allow all of these options, somehow. There are so many different ways people want to set up their cabs; some just have one list of arcade games, others want different systems/emulators, others want a complete compendium of every video game ever made ;)
True, but we should probably agree on a way to find and select games. Leaving everything programmable will create a huge pile of spaghetti. :) Proposal: system selection; if only one system exists then skip -> genre selection; if only one genre exists then skip -> game selection. Games are checked on availability at startup, and if no games are available in a genre or system, then that selection is not shown either.
4. In fact: I'd like that to be the default: only show the games actually on the system. That way all systems can be in the systems.xml file, and the game XML files for all supported system can be present as well. It doesn't take much room, but it makes adding new systems much easier for the user, simply by adding the corresponding ROM and art files.Sure, we could do this. This would allow people to publish their complete lists and others to reuse them, even if they don't have all the games. I'm not completely sold on it being the default though, it depends on what the user is expecting and you don't want to go silently dropping things if the use thinks they're meant to be there.
We could leave it configurable, but I think the majority of the users would prefer to only have games shown that are actually available for play. That's why I think it should be the default choice in the configuration file.
5. I would like these files to be a part of the standard directory structure; not a part of a $HOME/.cabrio directory. This way we can distribute packed directory structures with files (possibly as torrent) to allow users to quickly set up their environment.If the data is truly authoritative it can go in /usr/share (or wherever) for sure. It should be possible to override/supplement at the user level too though.
What I meant was that the directory structure of Cabrio should be fixed, starting from a user configurable starting point of course. This will make it much easier for users to set up their system, and for us to offer support and downloads.
6. Hopefully we can get permission from HS and Emumovies to do the same for their files, but if not I'll write some tools to automate the installation process after users download the files from their servers using membership there. Obviously we'll add our own art/themes to the process.It might be tricky to strike the right deals but making it easier to use external resources would indeed be a huge plus.
It would be best if we could work together with them, and help them build one repository for this kind of material, but worst case we can be compatible, and have users download the material themselves. We just need to make it convenient for them to do so.7. We need to have a look at file detection. I think identification should be based on:
1. file name
2. full name
3. cloneof file name
4. cloneof full name
This should cover most naming systems used by the available repositories.I have a suspicious feeling this is really difficult to do well. I also rather expect someone's had a good crack at it though and we can probably find some open source solution.
I did something similar in my own front-end, so it's really not that difficult. Since I'm volunteering to write the file I/O functions, I'll take care of this problem as well. :)
Let me know what you think. I'll post more if thoughts pop up. :) If we agree that the current XML parsing takes up too much time, and we've decided on file formats and class definitions, I could write the file I/O functions. It would save me some time if I don't have to delve into the OPENGL functionality at this time, have one of you handle that, and make myself useful by writing supporting functions and tools. :) If you could send me an email I could send you some intermediate results as soon as they come available.Cool. I think we need to look at why the list reading stuff is slow right now. It could also be that the XML part is fine but the delay comes from the rather simplistic way the list is built, e.g. it's also sorted just by walking though the whole list until the right spot is found.
It might be worth having a look at to find out what the real cause is. Proper XML parsing would be nice, but if it's really too slow I'll just write something simpler, probably without the validation. Do you see any issue with using the HS XML list format? I can easily reprogram my tool to output that format in stead of the Cabrio 1.0 format, since I'm already storing all that information internally anyway. Just a matter of slightly rewriting the write function.
On Tuesday, October 07, 2014 04:54:38 AM Pieter Hulshoff wrote:
> On Tuesday, October 7, 2014 11:05:35 AM UTC+2, Steve Maddison wrote:
> > On 6 October 2014 15:25, Pieter Hulshoff <phuls...@gmail.com <javascript:>
Personally, i really like the grid idea instead of a wheel. Think something
like the game grid view in steam. I'd also like some sort of "bread crumb"
display to cue the user where they are. Maybe show small icons up top "SNES >
F".
Hyperspin uses a clrmamepro format. Game lists can be generated automagically
(in windows native... possibly in wine) and only include what the user has
locally. HS will read the whole thing in and just not execute missing
games/exes. It tries, then fails right back to their GUI, no prompt.
We need to be careful about word choice. To me, afull game list is like MAME's
multi-thousand list... i'd wager most users only actually play a few dozen
games... collections may be one or two hundred max, but we want to handle
arbitrary size without too much overhead. The user should be free to clutter
their HD however they wish with images and movies,, however we should not
allow them to try to play a game that isn't there.
Another thought. I used my arcade to play steam games and windows games in HS.
I had to create a link launching exe (e.g. an "emulator" )to get steam to
work, and threw all relevant links into a specific folder. Its an oddball case,
but what are peoples thoughts on handling direct executables?
HS requires all xmls reside in subfolders from its exe. Lets not do that ;-).
we can use an environment variable instead.
I'm not sure how this works without deep inspection of xml. Personally, i
avoided clones unless they were the english version. I found it annoying to
have a dozen of the same game show up in the list... then remember i wanted
"world, 4-player" not "japan, 2 player"... especially when there was an
arbitrary character limit that might cut that data from being displayed.
A database may be the answer. Its trivial to say "SELECT * FROM snes WHERE
genre LIKE "fighting" LIMIT 50". the only gotcha is we would need to store xml
modification times and be able to update intelligently. we could just blow away
a section "GENESIS" and reimport...
On 7 October 2014 13:54, Pieter Hulshoff <phuls...@gmail.com> wrote:I think that's a fine starting point but we need to make it easy(-ish) to change/make configurable later.
I guess I'm coming from the old (existing?) situation where we're defining everything up front. In that case I've put these games in the list, so I want to see them. Looking at it from your standpoint it would be just as reasonable to drop non-existent games. As long is it's easy to determine that a game has been dropped and why, I think it's a fine default in that case.
I rather suspect we can get away with a standard library for the actual XML and that the performance issue lies elsewhere. No problem generating HS XML format; even if it doesn't become our standard we'll want to be able to support reading them anyway.
Personally, i really like the grid idea instead of a wheel. Think something
like the game grid view in steam. I'd also like some sort of "bread crumb"
display to cue the user where they are. Maybe show small icons up top "SNES >
F".
A database may be the answer. Its trivial to say "SELECT * FROM snes WHERE
genre LIKE "fighting" LIMIT 50". the only gotcha is we would need to store xml
modification times and be able to update intelligently. we could just blow away
a section "GENESIS" and reimport...
On Tuesday, October 7, 2014 3:29:12 PM UTC+2, Steve Maddison wrote:On 7 October 2014 13:54, Pieter Hulshoff <phuls...@gmail.com> wrote:I think that's a fine starting point but we need to make it easy(-ish) to change/make configurable later.
Adding that configuration option from the start should not be an issue; just define a (global) variable, and set it to filter available as a default. Users can overwrite it in the .cabrio/config.xml file.
I guess I'm coming from the old (existing?) situation where we're defining everything up front. In that case I've put these games in the list, so I want to see them. Looking at it from your standpoint it would be just as reasonable to drop non-existent games. As long is it's easy to determine that a game has been dropped and why, I think it's a fine default in that case.
Perhaps it would be good to keep a log file in which such information is stored?
I rather suspect we can get away with a standard library for the actual XML and that the performance issue lies elsewhere. No problem generating HS XML format; even if it doesn't become our standard we'll want to be able to support reading them anyway.
I'll work with the HS XML format as a base then. I'll also have a look at the current Cabrio loading routines to see if I can figure out what's slowing it down. If it's a structural issue we can solve it. If it's an XML validation issue, I'll write my own functions in stead. I used to read in about 30k games per second, though that was as a compact format rather than an XML format. I'll have to run some small tests to see what works best.
On 7 October 2014 14:30, Joseph K <jcko...@cs.unm.edu> wrote:Nice... there would have to be some kind of distinction between skins/themes that are simply images/ layout and that which actually use code. And I suppose we'd need to think about how the former would map to various forms of the latter.
Indeed, using the database like this is essentially a cache and needs to cater for updates properly, tracking files by name, timestamp, maybe some hash like MD5.
Hi all,Before anyone gets too excited: no, there is no 2.0 version yet, nor is there even a 1.0 for that matter ;-) I am however thinking about tackling some of the niggly things in Cabrio and whether these would be best retro-fitted to the existing code or part of a complete rewrite.One thing I'd like to do is to get away from the old OpenGL 1.x code and on to something that will work on OpenGL ES devices as well as the desktop. The pain of doing so may be somewhat mitigated by using an existing 3D engine which abstracts the differences away. I've been looking at Irrlicht and am now playing with OGRE, both of which are C++ based and would probably suggest more of a rewrite than an update.This brings me to another point, which is whether to stick with C of move to C++ (which seems to be the norm for 3D engines) or even something completely different like Python or Go.Back on the topic of abstraction, some kind of wrapper around the ever-changing ffmpeg libraries would be great, but I've not found anything like this as yet.Some other spitballs:* Whether to keep the XML configuration files or dump them for something else.* Possibly using an SQL database for game lists, etc.* Configuration from within the GUI (optional, protected by password/PIN).* Custom events/actions for games.* Redoing themes properly, with absolute offsets for everything.* Building with autoconf (Psychomantis had a crack at this but I never managed to get it working).
* Arbitrary number of images per game (box, cabinet, control panel, etc.)* Game ratings (0-5 stars or similar).* Displaying misc. game info text (synopsis, review stars, etc).* Attract mode (randomly flip though games at idle).* Background pan and zoom.As fellow developers I'd like to hear your opinions on this stuff, especially the technical decisions if you have experience building 3D apps for multiple platforms.Cheers,Steve
Are you familiar with RetroFE? Should we contact its developer to check if he wishes to reconsider making his code F/OSS, and work together?
There's quite a few people at HS interested in our plans, and willing to work together on this one, so I'm having some discussions there to get things up and running. One of the highest on the wish list there is to have HD support, which I think shouldn't be much of a problem. Several artists would love to create HD art for a new front-end, though Windows and HyperLaunch support would be appreciated. I'll have a closer look at either loading (and converting internally) and/or converting externally the HS themes to make all our lives easier. I'm not an artist, so I'd rather leave theming to people who know what they're doing. :)
I'm not yet planning on using a real database system for now; just a simple internally generated version of it. If I set it up correctly, it could always be replaced with a real database system later. At the moment, I'm considering building both: an XML based menu structure which also fills the database, and which can be replaced by an internally generated menu structure as well (though that may have to wait for a later release; let's first get something simple working).
In the mean time: do we want to spend any time on improving Cabrio 1.0? It could probably do with a few (simple?) updates to fix some user problems (like the large list problem). Alternatively we need to get this project off the ground. :)
Steve? What's your situation at the moment? Do you foresee having any time available for this in the near future?
Are you familiar with RetroFE? Should we contact its developer to check if he wishes to reconsider making his code F/OSS, and work together?
Nice, and indeed no problem at all. As long as your machine's quick enough even Cabrio 1.0 could do HD, given the right image resources. Conversion, whether real-time or with some kind of import tools, all sounds very cool indeed.
* Game list is just something containing all the games individually, with their names, platforms, genres, etc. It may well be a list of all possible games on all possible platforms, it may even be populated from different sources. The game list however knows nothing about the menu structure.* The menu is how you navigate through your list. This has a (configurable) structure so you can start out on platform, drilling down to genre, or the other way around, or something completely different. The menu however doesn't actually contain any games; it queries the game list to generate the selection of games that currently matches the user's selection.
* All the theme/layout business sits on top of all of this and instructs the renderer to put images in particular places on the screen.
As far as I'm concerned Cabrio 1.0 is still a "live" project, even if it's very, very inactive. If anyone wants to work on it: by all means! There are already some nice forks out there with more features. I'm also happy to receive pull requests, although as I don't have time to review/build/test huge changes, any pull requests back to the "official" repo really need to be small(-ish), easily manageable and in themselves complete.
I hope to at least have a good look at things over the holidays and get back to coding again in the new year.
Pieter/Steve,
Apologies for not being as active these past few weeks. Along with only
having one hand, I've had my daughter and of course all the holiday
madness with family that comes with it. I hope to devote a couple
evenings a week (est 2-3 hour blocks, maybe longer) to get something
going.
Last week I got my cast off and pins out, so a good deal of focus has
been on getting my hand flexibility back. My typing speed is a bit
slower than it was, and I have to take more frequent breaks, but I am
getting better.
My next plan for the code is to integrate your structures into the
rendering and display code (class names elude me right now, I'm at
work). My intent is to minimize redundancy by having the user interface
code peer into the GameList and related classes. I'm trying to make it
so my code "doesn't care" about the underlying structure, as long as
there is a concept of "next" and "previous".
To answer your question, I think a database approach would be robust and
potentially very fast. It is much simpler to say "SELECT * WHERE
type='ACTION'" than it is to store a 10K+ list and sort things yourself.
The question then becomes "How do we make it easy for the user to
populate it?". I think the answer there is another application that
reads XML or pulls directly from given directories. I think this could
even start out as a Perl script... as long as we had a well documented
means for the user to provide input. We just need a top-level XML or
folder that informs the rest of the tree, and thus the DB tables.
Then of course there is licensing. We obviously wouldn't want MS SQL
Server or OracleDB... and MySQL or PGSQL could be overkill, but still
usable. It'll have to be abundantly clear which we are using. We'll also
likely have to have some auto-install and auto-run in place. Doable, but
I haven't actually done it before.
Are you familiar with http://www.hyperspin-fe.com/forum/showthread.php?t=31916 ?
Is that something we may want to add to Cabrio 2?
Gentlemen,What's your status? Are there any updates on your side for Cabrio 2? What are your plans for the near future?
--
I'm working on a redo of my menu code, and integrate the selection and criteria based generation while I'm at it. That should suffice for now.
That Cabrio theme looks very similar to the behaviour shown later in that RetroFE video actually. All in all it's just a theming thing though; theme preferences differ. I'm mostly interested in the code base; is it usable for what we want or not?
Have a look at http://www.retrofe.com/documentation/Layouts.html to get an idea of the theming features available.