Most of arcade2000's developer features are now publicly available for free! You can create a game and post its scores to an online
arcade2000 chart. Players can upload their own banners, decorators, PFPs, and homepages. They can pin their rank to their badge board
to brag about it across the entire site (even in other games' charts!). And you can add achievements and subscores which allow for
some really interesting filtered charts via the
button in the charts!
Wondering why you should connect your game to arcade2000's online high score charts? Hopefully this page will convince you! (Note the "why connect" page pitches some features like replays that aren't available to community games yet. Making something big and cool? Email admin@arc.hiddenade2000.io and ask about a full fledged dev account!)
NOTE: arcade2000's game API is a free service provided without warranty of any kind. By using it you agree not to hold arcade2000 liable for anything whatsoever, including but not limited to bugs, outages, etc. At the time of this writing arcade2000 is a site built, maintained, and paid for by a single person. I hope I can keep it free forever, regardless of the size of your game, but can't guarantee server and storage costs will always allow that. Please be considerate, and understand that while I would like to offer support (time allowing), I'm under no obligation to do so. Thanks for using arcade2000!
The three basic things you need to figure out in your engine: device ID, submit a web request for score submission, open a browser for score chart.
Here's a code example in Godot. If you are using a different engine and need help, feel free to email me at admin@arc.hiddenade2000.io.
a2_community.gd
Here's a simple game example in Godot, along with a manual test interface similar to the query string generator on this page. godot_community_example.zip
To create arcade2000 games, you must have an arcade2000 account. To get one, you have to put up a score in a game. You can consider this to be the site's "captcha" against bots creating accounts. So for example, you could go download Kersploosh! for free, run the game, type in a name for your account, get a game over, then press 'C' to go to the game's high score chart. You will "soft login" to your account using your device ID, and can now set a password. If your username was already taken, please note your username may not be a clean version of what you typed in, so you might want to change username too.
Once you have an account, go to your settings page (usually accessed by clicking the gear in the upper left of a game's high score chart). Under the "Dev" heading click My Games. Please read the message about my API being provided without warranty. If you agree, click "Create a new game."


"Achievements" on arcade2000 work a little differently from traditional game achievements, as they are achieved and tracked per-run rather than per-user. This allows some fancy scoreboard filtering, such as the high score chart of all users who completed the game with a certain weapon, or while doing a specific trick, etc. For example, here is a chart of everyone who used the Plasma Cannon in Evil Egg. Achievements can be pinned to badge boards and could lead to your game being discovered from other parts of the site, so you're highly encouraged to add some!
Adding achievements can be as easy as clicking "batch achievement upload" and selecting a bunch of *.png icons for your achievements (will be resized to 52x52). The nickname of the achievement will match the filename, and the user-readable name will be created by converting "snake_case" to Snake Case. If you need to modify them after you can just edit them in the achievements panel.
"Subscores" are anything you think players might have a fun time tracking. Enemies killed, number of jumps, etc. Subscores aren't just fun to track, players can also create filtered charts with them to have even more ways to compete. For example, here is a chart of everyone who got the biggest scatterbombs in Kersploosh, along with how big they were.
Scroll down to the subscores panel in your game's edit view, then add any subscores you think would be relevant, paying careful attention to the distinction betweem "name" (user readable) and "nickname" (url readable, no special chars).
Take note of the "game versions" selector. You have the ability to make new game versions so you don't have to wipe the scoreboard with each new version. To start out, you don't have to do anything here, since version v1 is created automatically, but just note it's there in case you need it in the future.
Now that you've set up your game, you're ready to submit scores from it! Submitting a score involves one simple GET request (the same type of web request you can do from your browser by typing an address into it). You'll need to create a string with the proper query parameters. Query parameters are anything that happens after ? in an URL. For example, https://arcade2000.io/a2/api/submit-score-easy/?game=mygame&username=hello&score=123 would have the query parameter "game" set to "mygame, "username" set to "hello", and "score" set to 123 (note you need more parameters than this to successfully submit a score).
To ensure people can't just submit scores by typing in an URL, you combine the first chunk of your query parameters with your game's secret key, then take an md5 hash of it, then tack that md5 hash on as the last query parameter "hash." More on this below, including an automated query string generator for you to play around with, but for now I'll just describe all of the query parameters:
When you submit a score, there is a security hash you must calculate, to ensure people don't cheat score submission by just typing scores into an URL. You need to use the md5 hashing algorithm on the query string you've constructed, with the game's secret key tacked on the end. For example, if your secret key is xZyMihUE6TpfwQqC, tack it onto your query string like this:
game=mygame.v1&level=mylevel&score=12345&frame_length=12345&username=hello&device_id=DEVICE_ID_HERE&subscores=sub1:123,sub2:234&achievements=ach:123,ach2:234xZyMihUE6TpfwQqC
Compute the md5 of this string and convert it to hexadecimal. This is your hash, which you must tack onto the end. If done right, you should get a 32-character string where each character is between 0-9 or a-f. Example: 79d18ad4d5ee4cc1b589409c080e58ca. You finalize your query string by making it a request to https://arcade2000.io/a2/api/submit-score-easy/ , then putting &hash=[CALCULATED HASH] on the end of your query string (making sure to not include the actual game secret key, which is private info) like this:
https://arcade2000.io/a2/api/submit-score-easy/?game=mygame.v1&level=mylevel&score=12345&frame_length=12345&username=hello&device_id=DEVICE_ID_HERE&subscores=sub1:123,sub2:234&achievements=ach:123,ach2:234&hash=79d18ad4d5ee4cc1b589409c080e58ca
For easy testing, you can compute hexadecimal md5 hashes here.
So, before you even implement anything in your game, you can test your understanding of the score submission by manually building a score submission URL,
computing the hash using that website, then putting the build URL into your browser and see what the response is. If you can successfully submit a score that
way, then all you have to do is implement that logic in your game.
Purely for testing/example purposes, here is a query string builder that you can use to test the endpoint.
The URL for your game's chart is https://arcade2000.io/game/your_game_nickname/. However, when you open this chart from your game, you'll want to add extra query parameters.
It's important to have a way to not just display the high score chart, but also soft-login players who have played your game. If there's no soft-login, players can't use any of the site's features like profile pictures, banner images, decorators, home pages, badge boards, or omni boards (if they get created for community games in the future). For players, soft-login is as simple as clicking "scores" in your game and having a browser window open. They will be magically logged in.
When you open the browser, you'll supply more query parameters to the URL that allow the player to get logged into their account using their device ID, despite the fact that they never set any password. The format is this:
/game/your_game_here/?username=my_username&device_id=DEVICE_ID_HERE&soft_login_game=your_game_nickname&game_version_identifier=v1
username (required): same username they submitted their last score with (you should keep track of it).
device_id (required): as always, make sure you remove or escape any special characters, and make sure you supply it the exact same way you did when
you submitted scores.
soft_login_game (required):
your game's nickname.
game_version_identifier (recommended): the charts will go to your game's current version by default. To make sure previous versions keep going to the appropriate
chart, you can specify the version explicitly in this parameter. If it's the game's current version identifier, it should be cleaned up out of the URL before the page displays, just
like the soft-login query parameters.