Jump to content

All my products and services are free. All my costs are met by donations I receive from my users. If you enjoy using any of my products, please donate to support me. Thank you for your support. Tom Speirs

Patreon

For people that like achievements


kev25b

Recommended Posts

Cool, I love the idea. I'm an achievement hog on Xbox. Only thing I don't like is having to install ANOTHER emulator! But I guess that's understandable since you need something track your actions; like time, points, etc. I wonder if it has a way to export your achievements so you can plaster it onto your signature in forums or something.

Link to comment
Share on other sites

How cool is this! Looks like I've got some work ahead, gonna figure out how to integrate this into the cabinet without making new entries... Time for Emulator Commander! :-)

  • Like 2
Link to comment
Share on other sites

How cool is this! Looks like I've got some work ahead, gonna figure out how to integrate this into the cabinet without making new entries... Time for Emulator Commander! :-)

Looking forward to it, How difficult would it be for you to implement something like this?

Link to comment
Share on other sites

It'd be awesome if you could bring up a list of what achieves you can get while playing the game. Sorta like the Xbox, hit the center guide button, bring over the achievement list, and know what you have and what you still need to get.

This is all one step closer to what I'd LOVE to see come in the next/future GameEx Evolution.

Link to comment
Share on other sites

This is all one step closer to what I'd LOVE to see come in the next/future GameEx Evolution.

I love this idea!

The only potential issue I can see with this is that traditionally GameEx takes a "hands off" approach to whatever the emulator is doing at any given time. Due to the fact that the emulator itself is "in charge" of tracking achievements (since only the emulator knows what's going on with the game at any given time), GameEx is somewhat divorced from that process.

In order to manage this there would need to be some sort of "interface" between GameEx and the specialty emulator(s) tracking the achievements (possibly something along the lines of HiToText or something).

What I'm saying is that the interface would need to be built before GameEx could do anything with it (again much like HiToText), and that this functionality would be very dependent on emulator functionality beyond the control of GameEx. As a result (assuming that the interface were part of the GameEx core) GameEx would potentially need to be updated every time the emulator received an update. This sort of thing gets ugly in that GameEx would be effectively beholden to the release cycle of an external project.

Due to the factors above I think it would be better managed in the form of a plugin rather than as part of the GameEx core.

Now what would be sweet is if Tom were to put appropriate method hooks into GameEx so that any variety of "achievement plugins" could feed a common format of achievement data into GameEx which would in turn be displayed in GameEx. The beauty of a model like this is that it opens it up possibilities for aspiring developers to develop any multitude of achievement plugins so long as generated achievement data where passed in a common format (... like HiToText ... I sound like a broken record don't I! :lol:). So with something like this I could see my Steam Achievements, right next to my Retro Achievements, right next to say ... my High Score Competition achievements or something ;) (assuming there were plugins available for all of that). And best of all GameEx doesn't have to "know about" the development cycles of any of those other projects (Naturally the plugins would ... although at least in that case we're talking about microcosms of very specific purpose driven development)

Going even further to the down the rabbit hole, assuming achievement data was in a standardized format, it could also be passed into GameEx Online in the form of a web service! (or whatevs)

Whoa ... sorry I really went on there! You really got my imagination working there Han! :D That's my two cents at any rate, and this is (naturally) all pie-in-the-sky talk. I'd love to hear what Tom had to say on the subject!

  • Like 1
Link to comment
Share on other sites

Okay, I have a couple ideas I want to run by you all. If I'm going to start coding this, I would like some input from all of you first. Let me bounce my ideas off of you and see what you think.

#1) A plugin

Using a plugin is probably the quickest way to add in the functionality. I can make a configuration screen where you would select, say, the SNES emulator from a pull-down list. I would have a subsection where you would tell the plugin where your achievements emulator is for each system. Then in a seperate pull-down menu, you can select the game and apply the change. Then when GameEx is running, it will look to the XML and say "Oh, this is an acheivements game. I know what to do!" Then, I could internally pull out the normal command line and replace it with a new one, and hand it back to GameEx. This is basically how MAME Commander handles emulator overrides for specific games. There's some pros and some cons if I go this route:

PROS:

  • I could quickly have something up and running, making this a fast coding project since I already know exactly how I would handle this.
  • I can add an update check for the emulator in each supported emulator's configuration menu (probably accessed from a ToolStrip).
  • I already know my way around the plugin system, so nothing is outside of the realm of possibilities (ie no request is out of the question).
  • There's already a centralized list of supported games on the site, and the author has some sort of API (I haven't looked into it yet, but I may be able to sync the games list automatically and be able to make the plugin run automatically for supported games)
  • This is probably the best way to support user created achievements
  • Existing plugins (like Xpadder) would already work without a need to add anything extra

CONS:

  • The end user would need to set it up themselves, which is probably gonna lead to a lot of questions from users
  • There would be some elbow grease required if you wanted to keep your game list and emulators up to date (provided I can't get anything useful from the API)
  • I would need to figure out a way to intercept the ESC key, which brings up the achievements menu in the emulator, since GameEx would just exit the emulator if this key is pressed
  • There's a limit to what can be accomplished via a plugin as opposed to an external launcher EXE, which brings me to my next idea...

2) An external launcher EXE (or a front-end of sorts)

I could build a launcher, kind of like the Taito Type X ArcadePC Launcher works. This could handle everything from the game list, to the emulators, to the achievements. You would need to set it up in GameEx like an emulator, and I would add in a slew of command-line arguments to specify the system, the ROM file, and any other args the actual emulator supported. This would obviously be a lot more global for the solution, and I would get up with the author of the achievements web site. If he or she would be willing to help me out, I could do a ton more, like integrated user acievements, maybe display your current achievements, etc. The possibilites are really quite endless. Now for the pros and cons:

PROS:

  • Functionality that only a front-end launcher can provide (Think of it as a MAMEUI vs MAME thing)
  • Integration with achievement lists, creation tools. memory searches, etc
  • Fully hook and keep an eye on emulator versions, artwork (if applicable), game list updates, etc
  • Support for virtually any front-end that can pass command-line args, not specifically GameEx
  • Integrated update support for the EXE, much like GameEx checks for updates
  • The ESC hook in GameEx can easily be bypassed using an advanced config
  • Possibly be able to hook your User Account from the main site, displaying buddy lists and your global achievements, etc (this would be possible only if the author allows obviously, again I'll have to take a closer look at the dev team's API)

CONS:

  • It would take a lot longer to come up with something that would be usable by everyone
  • The leg work (getting with the author of the site, asking for things, gathering command-line args for each emulator, etc)
  • The project scope is a lot larger since it's like a mini front-end in itself

What do you guys think? I'm working on a launcher program for GameEx and PinballX, but I'll put that down and pick this up for a while, I want to be able to use it on my cab so that'll motivate me to code this bad boy. I feel like if we use Option #2, the author would probably be a lot more willing to help, since it will be usable by everyone, with or without a front-end, since it's kind of like a front-end in itself. But again, I'm merely speculating. I kind of like to think that #2 would be a better option for me personally, solely based on the notariety aspect as a developer... but that's more of a pat-on-the-back kind of thing. I'm never opposed to making things that require one to use GameEx, since my heart and soul is in this community. ;)

Then again, maybe I could do both, and the plugin could hook the front-end... But that's a lot to bite off. :)

  • Like 2
Link to comment
Share on other sites

I'm with you; if I were in your shoes I'd probably go with the second option. I think the cons you listed under option 2 have less impact than the cons listed under option 1. And it grants you more freedom to do additional stuff in the future, (like a plugin interface between GameEx and the standalone version).

If I were branching out on a project like this I would try to package up most of the common functional bits into a DLL so in the future you could utilize common static methods across disparate code modules. Just a thought.

I'm currently blocked from reaching retroachievements.org, but now I'm curious to check out their API as well! If it turned out that the API itself was not geared towards exposing achievement lists (which would frankly be a bit surprising) in a common (XML?) format, it would be extremely useful if your application was able to do so.

The other super-duper sweet thing about this is that it affords the opportunity to cross-pollinate achievements from all sorts of systems and pull them into a singular interface (essentially for any system that allows you to pull down achievement data). Say ... like on Steam for instance. ;) That's also where I think it might be beneficial to develop a "common" XML layout for various achievements, since the format of Steam achievements will likely be different than retroachievements, which in turn will likely be different than other systems as well. That way if Tom wanted to display achievements directly in GameEx (via your DLL for instance) he would only need to worry about trying to parse one common XML layout rather than dozens.

And one other thing ... allow me to say that YOU ARE DA MAN! I have amazing respect and admiration for your willingness to dive into a project like this and go for the throat. You rule. :cheers:

  • Like 2
Link to comment
Share on other sites

Wow, I didn''t know Steam had an XML API, that is going on my todo list for Game Info for sure. Thanks for the tip on that! I can already see the popup viewer on my 2nd monitor with my global game progress and my achievements list... That just rocked my whole world!!!

I appreciate the kind words nullPointer... It is a lot to bite off as I said, and it could be at least a couple months minimum given my free time and whatnot before I could offer anything to the user.

I have thought about building an external DLL, but that would be unchartered territory for me. Not to say I couldn't do it, I would just need to learn how to do it. I don't believe it's all that complicated, it's just more or less a usable code library that one would import as any other dll in any other project.

I'm going to draft an email for the dev team over at the site, I wanna be sure I know what I can do, and how helpful they will be if I do persue this. I'm not gonna lie, it's gonna be a really big project, and I intend to throw everything I have into it if I do this. There are so many aspects to it, that the feature list won't be 100% on launch day, but instead it will be expanding over time. It's really gonna put the brakes on doing any other projects for a while... but they have a great idea and a system inplace already, so I'll be happy to support the movement.

To be honest, maybe it would be best to just do both, and put out a plugin first so that we have the upper hand in the FE vs FE game... I'm always happy to see GameEx get a leg up on our competitors. Although it's more limited, a plugin would be a great hold-me-over until I can put out something more complex. I'm really at a crossroads here, I just don't know what to do. :)

I'll go send that email now if I can get there on my work network.

Link to comment
Share on other sites

Would it be more feasible to build the core application and then develop add-ons that address the nuances of each emulator? It may make things a little easier should updates be made to emulator(s) under constant development have a major change to rewrite and add-on than to rewrite the whole application. Just my 2 cents as I am not a programmer by any stretch.

Link to comment
Share on other sites

I'm not sure I follow you Drac. Can you explain a little more?

I wouldn't have to do a rewrite fire emu updates, the core functionality will always be the same.

Link to comment
Share on other sites

The core would be basically the manager/interpretor for whatever emulator add-ons were created. It would be, as you suggested, practically a frontend in its own right. IDK, maybe I am ass-talking again or reinterpreting all of what you said in an extremely condensed and skimmed manner.

Link to comment
Share on other sites

Well...

I've played a couple games to try it, and so far this is kind of buggy. Full screen is causing blinking and freezing in my machine, so I have to play in a maximized window. The achievement notifications seem clunky, and they're not very attractive to the eye. I couldn't get it to load zipped ROMs. Pressing the back button on my xbox controller lists all the achievements, but cosmetically the system needs a lot of work. It's just not quite there yet. :'(

The API is entirely based on PHP, and unfortunately my server uses php 4.x and the code requires 5.x so I can't really do anything except whine to my server provider for being way behind (good luck there).

It's cool, but it's got a journey ahead of it still. I'll try another emulator and see if that helps any, maybe my computer just dislikes GENS. I think the notifications are making problems for full screen though, and that's a problem in a cabinet.

Link to comment
Share on other sites

Looking forward to the progression on this one, This is the kind of thing that I would like to see very much.

If it happens it happens, if it doesn't work out so be it but +1 to Adultery for taking the initiative.

Link to comment
Share on other sites

Either way it'll happen. I just wish it ran smooth in full screen... that really bums me out.

I just set my php version to 5.3 so I'm working on API stuff. :-)

Link to comment
Share on other sites

Not being a smart ass, try it and see! :)

Log into RetroAchievements.org and press the Settings -> My Settings button. Make note of your API Key near the very top of your info page. Then use the following URL, but plug in your data where the XXXX's are:

http://draclabs.hfc-essentials.com/retroach/temp_api.php?user=XXXXXXXX&key=XXXXXXXXXXXXXXXXXXXX

The first step to integration. Success! :)

Link to comment
Share on other sites

I'll really have to check into this now if you're for real going to work on a way to incorporate it into GameEx. Sounds like a great new project for you Adultery, now that the HighScore stuff seems to be pretty much taken care of (thanks by the way!). Can't wait to see what you come up with.

Link to comment
Share on other sites

all dem previous posts blew my mind! i made an account straight away you knows it :D now i gotsta try me that linkage Adultery gave!

EDIT - sweet! can't wait to see what you do with the data - speaking of which imma go create some actual data - it's all full of zero's on mine ^_^

Link to comment
Share on other sites

Just finished converting the raw php dump requests into XML, which is my preferred method of parsing. Check out that URL again and you'll see what I mean. Now I can focus on setting modes for each type of data that I can grab, and then I can start coding something that takes it all and does something with it. ;)

  • Like 1
Link to comment
Share on other sites

Just finished converting JSON requests into XML, which is my preferred method of parsing. Check out that URL again and you'll see what I mean. Now I can focus on setting modes for each type of data that I can grab, and then I can start coding something that takes it all and does something with it. ;)

Good stuff

Link to comment
Share on other sites

Much more progress!! I have currently recoded all the available features of RA's Web API, and you can now get all the data they provide here in three ways: json, xml, and raw. They currently only offer straight PHP dumps of the arrays, and in some cases I had to make some changes to the output so I could properly serialize the XML and the JSON outputs. Enough of that techie garbage. :)

  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...