I wish I had screencapped it, but at one point I found myself in the middle of the screen, watching four swarm-like quadrants of fellow ships (top-left, top-right, bottom-left and bottom-right) all moving in relative unison. Anytime a swarm started to get close to me, I would inch away for a few seconds before the swarm turned back. I was able to stay in this middle, peaceful area for an extremely long time before random stray fire eventually finished me off.
I worked on a Node-based multiplayer Snake game for a while last summer, and was really excited to see this post. I was hoping the code would be public so I could see how he handled the sync issues. Took me a few minutes to figure it out... disappointment of the week.
If anyone is curious or wants to hack on something like this, you could check out my (unpolished) code: https://github.com/roblourens/nodesnake . My first crack at both Node and a multiplayer real-time game.
Edit - and the game is still live at http://aws.roblourens.com/ but looks like it may be a little buggy yet - I wish I'd known something like this was going to be on the front page of HN, I would have taken another look at this project and tried to have a polished demo!
I do want to build a real one. However, I was going to build in command lag as part of the game. Weapons would be player "aimed," but they would be beam weapons that would activate if there were a weapons "lock" and if the ship were pointed in the right direction. There would also be missiles and area effect weapons. The point is to design a game based on dodging and positional tactics.
Note: The link will eventually die (since it's a really early iteration I quickly published when I saw this HN thread; you can't even shoot anyone else) when I take it back down. Uses ImpactJS, NodeJS, and Socket.IO.
edit: Controls: arrow keys = move;
edit 2: I'll probably be open sourcing the game (at least the non ImpactJS parts) once it's more production ready.
Here's a good screenshot I got after playing for 10 minutes. This tended to happen to me about every 1-2 minutes. Either those are some incredibly synchronized humans or it's just an April fool's joke.
Yes. Another way to see this is that few (perhaps even none at all) other ships are constantly firing at maximum rate. If this were multiplayer, that'd be what most people would be doing.
It's easy to get this to happen. Just stay motionless until you have the attention of 3 or 4 ships. Then book it in a straight line. Suddenly, it zooms out and the ships start behaving like schools of fish.
Pro tip: if you're getting such non-random behavior, just clear your seb.ly cookie and you can play normally again. I'm guessing the more you play, the higher chance of non-random behavior there is, so that players gradually realize it's a hoax.
Yeah, I saw an entire screen of players turn toward me once before as well and turn away immediately later. Hopefully players end up in the same world with just a lot of computer opponents as well...
Anyone else only realise this was fake when they eventually opened the Network tab in developer tools to find out how it worked? After that, I double-realised when I noticed that none of the other ships ever idled while everyone else attempted to figure it out simultaneously.
Hmm, favorite strategy: zoom ahead full speed with a spammed bullet stream in front of you. After wrapping around enough times your bullet stream (and probably you) are going to nail someone. As you get better you can adjust your course a little to hit more, or hunt down people after that who are critically damaged by the bullet stream. :)
Fun, all in all, and an awesome tech demo. For finished games, there's already http://www.getcontinuum.com/ which is basically the game with rules and rounds and teams and whatnot. Although that is thick client.
Thanks for posting this. I am at work on an Asteroids-movement style MMO mashup with Elite. There will be "weapons lock" but there will be aiming and positioning as well, so dodging will be key.
Players will be able to design their own ships, which will have performance determined by their shape, and placement of components within. (So, the more wedge-shaped your ship is, the more armor value it has for shots from the front, but the slower it can turn because its structure is less robust. Also, the longer your laser-tube is, the better range it has, etc.) This will happen in a procedurally generated universe containing in excess of 2^128 worlds.
I'm doing this as a study in emergence in games. I want to implement an MMO where mindless "keyboard macro" grinding is totally absent. Wherever possible, we will replace a boring grinding mechanic with something akin to optimizing or micromanaging in an RTS or 4X. What's more, the optimizing/managing mechanics will actually be emergent themselves, building on the ability to write scripts for almost everything in game. (These will run on the server, so the user can license their scripts to other players for in-game money.)
Any owner of a Warp Gate installation will constitute a faction. Players will earn micropayments for use of their jump gate. The "Winning" faction will be the one controlling the most jump gates. Jump gates will require considerable exotic resources to maintain. Falling behind in jump gate maintenance will cause ownership to revert to the Precursor maintenance bots.
I actually did this with Joust, something like ten years ago, using java sockets for the communications and dhtml for presentation.
The multiplayer version is long gone, but you can still get try out the original dhtml head-to-head version (provided you have IE3+ or Netscape Navigator handy):
Hah! Great fun. I've found the strategy for long-term survival is simply to stay in the spawning point, spin, and fire as many rounds as possible. I suspect this is because the damage you take for hitting another ship's shields is set high enough that the probability of taking bullet damage is roughly constant whether moving or staying in place, while the probability of taking damage while moving is much higher than that of taking damage while staying in place.
Anyone with a more careful attitude towards quantitative analysis than I care to verify?
If these were humans, a standing-still ship would attract more aggression as an easy target, but bots don't seem to care about that, so it should be good option for maximizing kills/deaths. However, it takes a long time to kill anyone without active movement – hunting down near-dead ships is the best way to get best kills/minute. (and by hunting down i mean crashing into them of course, as well as point-blank fire).
function boom() {
for (var a = 0; a < 100; a++) {
for (var d = 0; d < ships.length; d++) {
var e = ships[d];
if (e != player) {
if (e != undefined) {
e.hit();
}
}
}
}
setTimeout("boom()", 2000);
}
function restoreHealth() {
console.log("restoring health");
player.energy = 200;
setTimeout("restoreHealth()", 100);
}
Unlike MMO Asteroids, we don't fake the multi-player element. (Try pulling the network cable :) ) But with that comes the problem of bootstrapping the game to get a critical mass, since the game is boring with a few players. Building an AI engine for the game seems very complicated because it's a strategy game.
I'm thinking of building a simple game like this(but not with shooting stuff) using node on the server side since it's the cool thing to do now.
But idk how many players a server could sustain or if the browser client might slow down when rendering many players on the screen.
Anybody want to help? Should just take about a week to build something playable i think.
If an mmo version of asteroids sounds interesting then you should try out Continuum (http://www.getcontinuum.com/) It was released commercially in 1997 and subsequently abandoned by its developer. The community took over the client/server and it has evolved into a pretty complex game.
How does one prevent cheating/hacking with a client-side runtime? Is there a crucial dividing line of functionality between server- and client-side functions? Say perhaps fog of war and client's only get the position updates of visible enemies?
If there are best practices / conventional wisdom, pointers (links) would be appreciated. Thanks!
For a real old school MMO you should all try Jet Set Willy Online, it involves a small client download rather than being browser based but it faithfully captures the original feel of the game. http://jsw.ovine.net/
My GF couldn't get over that I was spending my Sunday evening blasting away at 1900 other "nerdy hackernews-ers", until I realized from the coordinated attacks it couldn't be real. Still a ton of fun.
Lol yes this is lots of fun, however I seem to continously pickup some stalker hellbent on destroying me in particular and chasing me all across the universe. Well, atleast it makes me feel special :)
This was one the of things that I worked on to avoid, when building Pixza (pixza.com) a HTML4/5+JS+Erlang MMO game. I wrote a script to obfuscate all the JS object and member names to random strings before deploying the code.
SIGGRAPH 1991 and 2006 featured demos of the ~3000 member audience playing Pong. Each half of the room controlled their paddle by holding up colored wands to vote up or down. I think the 2006 show also had the audience pilot a flight simulator. It was amazing at how quickly the audience got really good at the games!
Here are some photos. I saw a video somewhere, but I can't find it now.
I once saw pretty much all 20 enemy ships nearest me suddenly turn towards me in near unison. Those were bots, not real people. I like the idea of the game. I feel a little disappointed that he appears to have lied about it actually being MMO.
I'll grant him one "get out of jail free card": perhaps it can be MMO, but if not enough human players are playing at any time he fills the world with bots. That's about the nicest guess I can make.
I wish I had screencapped it, but at one point I found myself in the middle of the screen, watching four swarm-like quadrants of fellow ships (top-left, top-right, bottom-left and bottom-right) all moving in relative unison. Anytime a swarm started to get close to me, I would inch away for a few seconds before the swarm turned back. I was able to stay in this middle, peaceful area for an extremely long time before random stray fire eventually finished me off.