I'd be very interested in hearing about the server-side setup, especially around isolating the code so some rando doesn't "require('fs')" and do damage to the server. How are you isolating the brains from the sensitive game data and from each other? How long does a single game take to run given max users? How are you protecting against "while(true);"?
Thanks so much for the interest and the questions. You are correct in that the web-workers repo is related. Its the repo we use on the back end. To answer your questions in turn:
"How are you isolating the brains from the sensitive game data and from each other?"
- We are sandboxing each user's code in an isolated environment where a server listens for a POST request on a specified endpoint. That request carries the game data with it and after the user's code runs, the server sends back the result of that function, which is supposed to be a string (North, East, South, West, or Stay). The game data itself is update on our server, after receiving the response.
"How long does a single game take to run given max users?" The games will take a maximum of 24 users, which will take a maximum of 30 minutes to run, if every user does something like "while(true)." Each server has a max-timeout setting of around 2 seconds.
I hope that answers your questions and please feel free to offer any feedback.
Thanks again!
So the AI can use up to 2 seconds of "thinking time" for each move on a some x86-server-like machine? Having played BitBath [0], I think this limit matters.
No matter how many turns are played, a match ends after 30 minutes? According to the rules, no team wins in this case?
Thanks for the clarification. I wasn't very clear in my answer before. The game ends after a maximum of 1250 turns or when all of one team's heroes are killed. If the maximum turn is reached, the team with the most diamonds wins. If every player on the team took the full 2 seconds on every turn, the game would last around 30-40 minutes.
That's interesting, I like that everyone's code has to be public on github so if you get relentlessly destroyed you will at least have the chance to learn from how your opponent works.
I haven't yet tried the game itself, but the testing page mentioned on the frontpage seems rather important, and I think I'll hold off on trying the game until that is implemented.
Also I think it would be good to mention at what time (in which timezone) each day the code is pulled and the battles are run.
That the code is public could easily be manipulated, by commiting minified code instead. It doesn't make it non-copyable but mostly unreadable.
There is a small testing utility (called " test_your_hero_code.js") in the repository where you can make sure your hero is working as it should. But I'm also looking forward to a proper testing page where I can see the battle.
Interesting idea however, looking forward to having some free time to trying it out fully.
Thanks so much for the feedback. As you said, we do have a temporary testing utility for users while we finish up our testing site. Hope to see you soon!
That's really good feedback, thank you. We are currently running the game at close to midnight, Pacific Time.
As far as the testing site, that should be coming soon, but feel free to try out our temporary testing suite in the meantime. The hero-starter repo has all the instructions for that.
Thanks so much for your comments and feedback!
Is there a place to comment on gameplay design?
As looking at the current rules, if a 'Coward hero' just sits at a health well hitting it ever turn they can't be killed by a single enemy hero attacking?
If I'm reading the rules correctly the attacking hero can hit 10 from 'moving' at the coward and 20 again at turn end for a total of 30, which the coward can heal by simply moving at the well?
Either way cool game/site will give spin up a Hero soon.
Thanks for the feedback. Feel free to use the 'contact us' link at the bottom of the page with any specific suggestions that you might have for gameplay. In the meantime, we hope you enjoy it!
*Note: The way to beat the Coward is by collecting diamonds. The Coward won't collect any, so won't be contributing to the team's score.
Thanks for the question. The comments below have a couple similar games, but we built JavaScript Battle because we felt it was unique. Let us know what you think!
Strange. It seems to all be working at the moment, but we'll try to squash more of the bugs today--please feel free to email contact@javascriptbattle.com if you're continuing to see problems.
So - what happens is I get bounced through a few 302 redirects from github back to the page, but I remain not logged in. Then if I refresh the page it displays me as logged in then. Hope that helps. :)
Thanks for the heads up--it looks like we have an infrequent but recurring bug that's causing this issue. We're working on a more permanent fix for the very near future, but for now it should all be working again.
Yep, it is "luck of the draw", and the default hero brain, while very good at gathering diamonds, does tend to be vulnerable to the "assassin" roles.
Eventually we'd like to add a slightly smarter matchmaking system (assign users to games based on some sort of performance ranking perhaps?), but for now it's very possible to end up on a less-than-stellar team.
any chance the console output of the battle can be sent to the account? this would make fixing bugs easier... or if "see todays battle" allows you to click on each hero and see there stats & console output.
Yep! The gameplay is very similar, but the tech stack, signup process, method for participating, stats, etc are all different from Vindinium. But they were definitely our inspiration (as Forrest mentioned, we actually have an "Inspired by Vindinium" link in our footer).
Thanks! ClojureScript (or Coffeescript, or anything other than JS) will not work "right off the bat", but you could compile to JavaScript on your end, then upload that compiled hero.js file to your github repository, and then THAT should work.
I'd be very interested in hearing about the server-side setup, especially around isolating the code so some rando doesn't "require('fs')" and do damage to the server. How are you isolating the brains from the sensitive game data and from each other? How long does a single game take to run given max users? How are you protecting against "while(true);"?
Here's a repo that looks related: https://github.com/JavascriptBattle/javascript-battle-webwor...