gia
Player (109)
Joined: 5/3/2006
Posts: 223
Any local based solution is on the honor system. But achievements are meant to be shown off I think, I'd be willing to make a site and offer the "services" for the programs to consume, but not to modify emulators or make lua scripts. The important and hardest part here is the lua scripts, cheat protection can be added one by one later. I doubt cheating can be prevented tho, so it would be better to advertise it on the honor system as well, the one thing that should be protected is the desicion of awarding the achievement, basically the client can't do it. The client can send memory values and the server have the validation parameters. I doubt possible cheaters would find useful having to do a bunch of research just to cheat on a single achievement, they'd rather code their own achievements.
Joined: 2/10/2009
Posts: 13
So you're saying you're willing to host it? All we need is a coder and a couple of memory-sniffers. This would be such an awesome project.
Banned User
Joined: 3/10/2004
Posts: 7698
Location: Finland
Cheating can never be completely prevented, but cheating being too easy should be avoided as well. If cheating is way too easy, it can tempt some people doing it. Even in a honor-based system removing the temptation of cheating by making it hard is a good idea. There should always be a minimum threshold of difficulty in cheating. Creating a special version of the emulator with all cheating mechanisms completely disabled, distributing the emulator in only binary format, and the server only accepting the data from that version of the emulator is a good idea. If this data is sent eg. as a movie record file, the file should be "non-standard" (ie. specific to this version of the emulator). It could eg. use some kind of light encryption (eg. xorring all bytes with a high-quality RNG, the seed being inside the executable somewhere). This won't stop a determined person from disassembling the executable and finding out the exact encryption mechanism (which will allow him to create and encrypt the movie files with the normal version of the emulator), but the main idea is that there's a minimum threshold of difficulty in doing so, and thus the temptation of cheating is minimized.
gia
Player (109)
Joined: 5/3/2006
Posts: 223
Sure I could host it, but not the nazi version that plays movie files, that's gonna eat the server :D. Valve microsoft etc servers don't do that much, they just receive "achievement unlocked" and move on, that's the other side of the coin I guess.
Joined: 7/2/2007
Posts: 3960
Warp: you also have to trade off security against the time required to implement that security. There's little sense in devoting a lot of effort to cheat-proofing a system that'll only be used by a small community, for example. In that situation you're better-served by relying on societal pressure to keep people from cheating.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
Active player (328)
Joined: 2/23/2005
Posts: 786
Here's some more brainstorming. For the achievements, the modified emulator would look for a lua script that automatically gets run when the game starts based on the rom's checksum. It would be stored somewhere like /gameprofiles/(game). If you're online, the emulator checks the lua script against the one on the server, and if it's not the same, downloads the server's copy and updates the local one. If you're playing offline, it would still record your achievements, but it would invalidate them if it senses that the lua script has changed without being updated from the server. Lua would need to implement new functions, or maybe a new API set. arcade.giveachievement(id) - awards achievement, arranges to confirm achievement to the server, and pops up a text box telling the player they've gotten the award. (Text strings are defined elsewhere, possibly in the lua script itself, possibly in an external text file or a database on the server. The achievement might also have a Steam-style icon, which could be stored in the /gameprofiles/(game)/ directory.) arcade.registercounter(id) - Defines a value that is to be saved and loaded to a data file every time the game is run or closed. Basically, it behaves like SRAM, and will keep a running count of certain values needed by scripts, like a running count of all the goombas you've stomped in every game session. arcade.addcounter(id, amount) - Adds to the specified counter variable. Accepts positive and negative amounts. If the counter overflows or underflows, the error should be silently discarded and the counter should be set to its maximum or minimum amount. Likewise, arcade.setcounter and arcade.getcounter. arcade.toggleachievement(bool on/off, id) - enables or disables a certain achievement. If an achievement is disabled, it cannot be awarded. If the ID parameter is not specified, enables or disables all achievements. This is useful for coding special challenges, specifically those which involve loading savestates or memory.writebyte, when you don't want other achievements to be activated during the "special session". arcade.menu(string, string, string, string, string) - Displays a hard-coded onscreen menu with the specified options and returns the index of the chosen option, 0 if the menu was canceled. Useful for giving the player an option of activating a "special session". If # options is not enough, the menu can simply open another menu. I can't see anyone actually following through with this idea in the near future, but it's fun to talk about.
Sir_VG
He/Him
Player (40)
Joined: 10/9/2004
Posts: 1914
Location: Floating Tower
Or maybe here's an idea to help limit cheating - modify a console version of an emulator (like, say, FCEUGX for the Wii) to work with the achievement system. Granted how the achievements will be saved can still be copied over or whatever, but it's still a cool concept, I think.
Taking over the world, one game at a time. Currently TASing: Nothing
gia
Player (109)
Joined: 5/3/2006
Posts: 223
But I dont have a current gen console :( While this is ontopic the starting topic was just about listing achievement suggestions, maybe this could be split. On the topic of the server side, any suggestion? Server: Server can be a web server or a console application. Personally I prefer web server. Second, it can work with ansi or utf-8, I rather go utf-8 but its easier on web servers, i recall its not that simple on c++. Going utf-8 allows the server to send text messages in other languages if that was ever necessary. Communication with Server - Services: For all the services, each transaction blocks the emulator program and waits 60? seconds, the emulator shows a window so the player can choose to start offline mode at any time. If the initial 60 seconds are up the transaction is cancelled and a new one begins for 61 seconds (and so on add 1 second until it passes or the user goes offline). a. Registration. Done through the website, your average registration... The user chooses a login and password, these can be anything allowed (ansi/utf8?) and will be used only for login purposes. They also choose a username, which will be used for anything displayed, the username is limited to at least one alphabet letter and followed by numbers [a-zA-Z]+[0-9]*(this cool?). b. Login. Required: login, password, controller. The login and password can be anything allowed (ansi/utf8?), user's fault if they go with weird characters and at some point they arent understood correctly. The server validates, tempbans the IP for incremental time starting with a day after about 10? failed attempts during the same hour?. Tempban severity reduces with time as well so as not to destroy unlucky dynamic ip users. Answer:
  • F# where # is the number of failed attempts remaining, if it reaches 0 the user was supposedly banned. The emulator should let the user know about this number.
  • T if the user is/was tempbanned, the time will not be sent. Repeated attempts to login after this should increase the length of the tempban ala Diablo 2. The emulator should remind the user about this: a messagebox, load the browser pointing to an official page explaining the case and/or just block the submit button.
  • B if the user is/was banned and as such their request was not heard. Block the submit button since this is useless.
  • S the login was successful. Following the first char there will be extra values, ini style (unless you wanna go JSON) with whatever else should be sent at login. The first value is the player's name, followed by the session id, and time required between pings in seconds, for example other value could be a message with the number of failed attempts on the account since last login.
c. Ping. Requires: session id. The emulator sends a ping, and the server verifies it. If it was sent too late the session will be over already, if it was sent (way) too early the server will raise a flag. you are supposed to send the ping early but not way too much (1.5 minutes before?) Answer:
  • S if its fine.
  • F#, it works like the login, so there can be a couple mis-pings due to changing windows clock. The server sends this in case the ping was sent early. The emulator has to catch this and in case this keeps decreasing let the user know.
  • O if the ping failed but didnt make the server angry (session over), the emulator has to forcibly pause and ask to login again before resuming or going offline (or retry automatically or whatever), if it just pauses this counts against the player if the lua scripts are taking this into account, the emu coders could blacken the screen and not do an ingame pause though.
c. Game loaded. Requires: game identifier, sessionid. Answer:
  • F if the game doesnt exist on the database.
  • S followed by the achievement ids and CRC of their scripts followed by achievement values comma separated (integer list)
d. Obtain achievements script. Just download it from the web server. The script contains the achievement name, description image urls etc. e. Send game data to server. The client sends data to the server by request of the achievements script, the server accepts it and executes its own verification script to validate and decide whether to unlock or not the achievement. its up to the achievements coder to keep this complex enough so that it can't be cheated so easily (do not send 0 or 1 and have the server unlock if it is 1...), send memory addresses and have the server calculate the stuff on its own if possible otherwise send some addresses to check consistency. The server updates achievement value and sends its results. Answer: list of achievements changed and a return value for each (technically you just return an integer, that's what gets stored on the database, but returning something else opens for whatever else, do i keep it simple?). Ideas, this can be done with this spec as is:
  • Off to On achievement. Technically it can go the other way too but this should be avoided unless its something creative as it encourages stealing passwords :D
  • Bronze Silver Gold state for achievement, as you progress the achievement improves.
  • Leaderboard achievement, (ie. top ten at X) as I'm not ruling out the verification script could access databases. Returning the leaderboard table would not be possible just by returning an integer though. Also remember leaderboards brings cheaters.
  • Personal Record type achievement, like leaderboard but you compete against yourself, it can be done with an integer but you'll probably want more?
  • The progress of one achievement changing another for whatever reason? (that another's script may or not modify its own value).
  • Different looks/animations for achievements, the script decides what to do after all.
Basically its free for all, but of course the ones that get added to an official release get moderated before so its all cool. Emulator side: Achievements window: Among whatever else allows login (login, password, controller), shows achievements for current game (standard size images), allows to reset an achievement, allows to select offline mode (which allows to use custom scripts), allows to check "automatic sign in", and remember me, and stuff like that. Reset achievement. This is not serverside, the client can reset an achievement to its initial value (lasts during their session) so that they dont have to create a new account just to get the achievement animation again. The emulator and script know however so it shouldn't send data to the server until its time to actually update the value, be good coders and dont have the verification script reset the achievement if you miss this, and also save some bandwidth. This doesn't reset the server (at least not directly), or people could steal passwords just for this. Actually..., only allow this while playing offline, yeah that would work. My personal take on Offline mode vs online, there are two ways to define offline mode, to me offline mode doesn't count for server achievements, offline means not logged in. It uses values stored on your pc or whatever that's up to the script and emulator. That eases my reset suggestion too. Then again the script/emu can always save the values that triggered the achievement and send when it gets online. So offline mode could be that, a user logged playing a script with no client side validation that allows to play offline after(or without) logging in. Vulnerabilities: If the player researches or the coder leaves the values required easy to see they can simulate a connection and submit the correct values, the only possible block against that is the verification script which can remain hidden, but against correct values it shouldn't be able to figure it out. Leaderboard type achievements would be subject to this. This is big enough that I don't think modifying the emulator or what not would be warranted for the cheater. At least, a cheater cant crack all achievements on the system at once, they have to crack them one by one. Counter Measures:
  • Avoid programming leaderboards. Do Personal Records instead.
  • Do not allow offline mode? that way you can hide the values you want (since your script won't do validation client side).
  • Make sure your code handles gracefully the case where an achievement value degrades instead of improves (due to coding error, hacking, etc), technically it should be ignored, unless you are 100% sure you want it happening...
Banned User
Joined: 3/10/2004
Posts: 7698
Location: Finland
Derakon wrote:
Warp: you also have to trade off security against the time required to implement that security. There's little sense in devoting a lot of effort to cheat-proofing a system that'll only be used by a small community, for example. In that situation you're better-served by relying on societal pressure to keep people from cheating.
I don't think disabling the cheats in the emulator and obfuscating the data sent to the server requires that much work. (Eg. the obfuscation part should only take a few lines of code.)
Joined: 3/7/2006
Posts: 720
Location: UK
I have the time and webspace to implement the server side of this easily. Also, re: the UTF-8 thing, it's not too much of a problem if you use something like libiconv.
Voted NO for NO reason
Banned User
Joined: 3/10/2004
Posts: 7698
Location: Finland
If you want to support utf-8 (and utf-16 and a bunch of others) in your C++ program, I have found this library to be unusually well made for that purpose: http://utfcpp.sourceforge.net/ (Of course fluently using it requires that you are fluent with SDL-fu, such as insert iterators, but this should be rather obvious for any self-respecting C++ programmer.)
gia
Player (109)
Joined: 5/3/2006
Posts: 223
Lag I already started, that doesn't have to stop you though :P I'm making my specs draft public as someone has to modify an emulator, I'm off the lua loop and I rather not learn.
Warp wrote:
I don't think disabling the cheats in the emulator and obfuscating the data sent to the server requires that much work. (Eg. the obfuscation part should only take a few lines of code.)
So to my tl;dr, do I add each emulator developer has to propose an encryption method and request the server mantainers to store their binary crc and associate it with this method. At b. (login) the emulator also sends its crc so that the server knows what decryption method to use later during and only during e. Or do you think all comunications should be encrypted. Remember that on the easiest path to hacking you just discover one encryption method for any emulator (if there is more than one available, or only one with different versions) then proceed to simulate a connection as if coming from that emu. This is because I am not considering to send movie files but the script's desired values which are constant between versions. On that note, another reason not to like verification by replaying of the movie file is that that means the server has every single rom, and that would be hell with (my) hosting.
Joined: 11/2/2007
Posts: 103
Blublu wrote:
Tetris Lucky: Get 2 tetrises in a row. Super Lucky!: Get 3 tetrises in a row. OMG! H4X: Get 4 tetrises or more in a row.
Try things that aren't so incredibly easy to do. D:
Joined: 7/2/2007
Posts: 3960
Doesn't Tetris's piece generator also preclude generating such chains of pieces? Which is also why the "well, every Tetris game will eventually end because you'll get a sequence of nothing but S blocks" argument is invalid. For that matter, isn't the Tetris well too shallow to fit 16 lines in? Which would be necessary to get 4 Tetrises in a row.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
Player (206)
Joined: 5/29/2004
Posts: 5712
Yeah, getting lucky is hardly an achievement.
put yourself in my rocketpack if that poochie is one outrageous dude
Joined: 5/13/2006
Posts: 283
Call them back to back tetrises, like Tetris Worlds does. You don't have to clear multiple tetrises with successive pieces, rather you don't clear any lines by a method other than tetrises. Doesn't make it hard though.
<Zurreco> if so called professional players cant adapt to every playing field, theyre obviously not that great
Tompa
Any
Editor, Expert player (2224)
Joined: 8/15/2005
Posts: 1943
Location: Mullsjö, Sweden
eternaljwh wrote:
Donkey Kong Country: Use only Donkey Kong. Avoid breaking Partner Barrels. DKC2: Diddy Kong Country: As above, but Diddy in DKC2 DKC3: Dixie Kong Country: As above, but Dixie in DKC3
These aren't possible. As you are forced to break some of the DK-barrels, such as at the start of every boss.
Joined: 3/11/2008
Posts: 583
Location: USA
Tompa wrote:
eternaljwh wrote:
Donkey Kong Country: Use only Donkey Kong. Avoid breaking Partner Barrels. DKC2: Diddy Kong Country: As above, but Diddy in DKC2 DKC3: Dixie Kong Country: As above, but Dixie in DKC3
These aren't possible. As you are forced to break some of the DK-barrels, such as at the start of every boss.
Mmm, true. So perhaps just a no-damage/switch run. And in 2/3, you can kill them without switching to them, so..
Joined: 2/13/2007
Posts: 448
Location: Calgary, Alberta
Chamale wrote:
Pokémon Red/Blue: Unlocked Door: Beat Giovanni's gym before any others. Lucky Throw: Catch a Legendary with a Poké Ball. Type Matching: Defeat the Elite Four with no Pokémon above level 50. Gamebreaker: Score a quadruple-effective critical hit. Sucker: Buy a Magikarp for $500. Curbstomp: Defeat a trainer in the Bug Forest with a level 100. Loyal: Defeat the Elite Four using only your starter. Not Mew: Using the surf bug, sneak into the harbour where the S.S. Anne cast off. Surf over to the truck and use STRENGTH on it with a level 100 Mewtwo, then SURF on it with a level 100 Rhydon, then use CUT with a level 100 Bulbasaur, and then don't get a Mew. Cautious: Save just before fighting every Gym Leader and Legendary in the game.
Hi guys, I've been kinda overwhelmed by all this new content, but I think i'm over it now. In reply to this, Does beating the elite four with no Pokemon get you both the Loyal and the Type Matcher achievements? Now my own Achievements: Wario Land 3 Lights Inside Out Use a lamp post as a door. Stop hitting yourself! Bounce off the Final Bosses hands to whack his nose. Solar Worship Jump off the Sun. Gang-Squished? Make the Dharma Boss trap you under it Thats all for now.
Renting this space for rent. Trying to fix image on this site. Please cut slack. As of April 6th, 2012: After a long absence, here we go again?
Active player (328)
Joined: 2/23/2005
Posts: 786
Some better ones for DKC2: Diddy Fan: Beat every level with Diddy Kong (so only Diddy's face displays on the world map for every level) Dixie Fan: Beat every level with Dixie Kong. Prize Winner: Pound the target at the end of every level to obtain a prize. Grand Prize Winner: Obtain a 1-up from every end-of-level target. KONG Completionist: Spell KONG on every level. Trivia Whiz: Answer all of Swanky's questions in the game on the first try. Family Patron: Complete every trivia game, purchase every advice, save the game at every college, and use every Funky barrel at least once. Treasure Hoarder: Obtain 99 Banana Coins. Animal Fanatic: Guide every animal buddy in the game to the end sign. Clean Sweeper: Obtain every Hero Coin and beat every bonus round on the first trip through every level. (Hero coins from the end-of-level target might be optional.) Bludgeoner: Kill 15 enemies with one cannonball. Ariel Ace 1: Kill every enemy without missing a shot on the Parrot segment of Squawk's Shaft. Ariel Ace 2: Kill every enemy without missing a shot on both the Parrot segments of Bramble Scramble. Animal Master: Complete Animal Antics without getting hit. Substance Abuser: Get hit by each of the 3 types of clouds on K. Rool Duel in the same match, and still beat him. Earthquake Survivor: Defeat Kudgel, letting him stun you every time he hits the ground. Last Stand Fail: Get KO'd by K. Rool's final cannonball.
BigBoct
He/Him
Editor, Former player
Joined: 8/9/2007
Posts: 1692
Location: Tiffin/Republic, OH
Type Matching: Defeat the Elite Four with no Pokémon above level 50.
I've done this. I was pretty proud of myself. Deus Ex (PC/PS2) Stealthy: Got through a mission set without being spotted Merciful: Freed the hostages in the Battery Park subway without killing any of the NSF troopers Merciful 2.0: KO'd or avoided the majority of enemies in the game. Long Distance: Killed an enemy from outside the accurate range of your weapon. Magic Words: Killed Gunther Hermann or Anna Navarre using their UNATCO killphrase.
Previous Name: boct1584
gia
Player (109)
Joined: 5/3/2006
Posts: 223
I was thinking, this is a tas community, what if there aren't only achievements for play skill but also tas achievements. That means the objectives are quite difficult to execute realtime and a such are meant to require a movie file to accomplish them. To emphasize that you are meant to obtain them through the use of tools these achievements would be properly labeled and separated and only awarded by playing back a movie file on the emulator. That way the emulator wouldn't have to be striped of its tas capabilities. It would be extremely easy to cheat but the achievements are to hold no value but a personal value and I believe that idea is reinforced if it is put like this. By having tas achievements the comunnity itself could promote tasing games that are not tased or that are usual cause of drama (I bet the popular games would get those first but later it would diversify and it would include fighters, racers, autoscrollers and whatnot!), people attracted initially by the normal achievements could get into tasing later. Having the rerecording/playback code at the same time as the achievements code on the same emulator could allow the achievement animation to play during tasvideos movies and if done well add to the entertainment. Maybe it could open a way to allowing some kind of arbitrary goals on tasvideos movies, maybe not. What do you guys think, I personally do not care if there are cheaters, if they want to cheat let them do so.
Joined: 11/11/2007
Posts: 242
Location: the 1950s
Mortal Kombat (1,2,3 and UMK3) Mercy: Beat the game without preforming a fatality. He started it!: Let your opponent attack you first for every battle. Mommy says I'm special: Beat an opponent using only special moves. Combo Breaker: Preform at least 4 combos. Bare Hands: Beat an opponent only using Physical Attacks. Money saver: Beat the game without using any credits. Money waster: Beat the game using at least 10 credits. Take it like a man: Beat the game without blocking. (excluding fatalities) 3 is a magic number: Beat the game with every match lasting 3 rounds. All too easy: Beat the game Easy or Very Easy. In the middle: Beat the game on Medium. You will never survive: Beat the game on Hard or Very Hard. Flawless Fighter: Beat the game with all double flawless'. Top dog: Get the 1st place high score. 3 mil: Achieve over 3 million points within 3 matches. Time's up! Beat the game with all matches being timed out. Mortal Kombat 1 Exclusives: Get a clue: Let Reptile give you a clue. tip eht fo mottob: Fight Reptile. Reptile killer: Defeat Reptile. Reptile destroyer: Get a Double Flawless on Reptile At least you tried: Get killed by Reptile I see everything: Let Shang Tsung transform into every character. Mortal Kombat 2 Exclusives: You'll get a Kick out of this: Fight Jade Who cares about projectiles?: Beat Jade TOASTY!: Fight Smoke Smokin' hot skillz: Beat Smoke You're friend sucks: Fight Noob Saibot Who's the Noob now?: Beat Noob Saibot Everyone's Here: Transform into all characters as Shang Tsung.(Also 3 and UMK3)
Currently working on: -Possibly the Wily Tower (Mega Man the Wily Wars)
Active player (328)
Joined: 2/23/2005
Posts: 786
gia wrote:
I was thinking, this is a tas community, what if there aren't only achievements for play skill but also tas achievements. That means the objectives are quite difficult to execute realtime and a such are meant to require a movie file to accomplish them...
I actually thought of this myself, and spent some time analyzing the idea, but I don't think the idea holds up. For one thing, it is WAY too easy to cheat, so much so that it almost defeats the point. Just share a movie file. For another thing, it's too specialized an occupation. It seems that it would only apply to this TAS community. Everyone else would just kinda throw up their hands and have no idea what actually to do to accomplish the tasks. So, why not just make the movie and post it on YouTube or something to show off? That's an even better way to get recognition and satisfaction for your work. For another thing, if you're going to TAS a game, why not just TAS it, and try to get a movie accepted to this site? Why would you want to aim for something like "Beat the game at least 5 minutes slower than the published TAS" when you could just go all out and compete with the movie?
gia
Player (109)
Joined: 5/3/2006
Posts: 223
Hmm I didn't mean speedrun or full completion (although used the s of tas sorry), just an achievement that is to be obtained through tool use, dont compare jump on x goombas in a row to a published tas, I mean you could go all out, but random guy that can barely load an emulator has to learn a lot. I think the easy ones could serve as entry point for those that dont do tases that can be interested. Im not sure who you mean should use youtube for satisfaction, regardless, in the case of the author the best course of action would be doing so with a description of how to obtain the achievement -for those that tried and failed so they can try again, AND the movie file -for quitters that are completionist or plain cheaters so that they don't have to spam for it. But of course I have the view that these achievements in general should have a worth of zero, honor code doesn't make it zero, it raises the value, easy cheating makes it zero straight from the start In the case of "users", normally they wouldn't, I think, except those that do let's play, but those would do videos of the skill achievements.