

Show HN: JavaScript Battle – A daily artificial intelligence battle - forrestbthomas
http://www.javascriptbattle.com/

======
drhayes9
CoreWars but with JS and GitHub! Cool idea.

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...](https://github.com/JavascriptBattle/javascript-battle-webworkers)

~~~
forrestbthomas
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!

~~~
qznc
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?

[0] [http://www.hacker.org/bitbath/](http://www.hacker.org/bitbath/)

~~~
forrestbthomas
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.

------
tokenizerrr
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.

~~~
diggan
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.

~~~
forrestbthomas
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!

------
stephentmcm
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.

~~~
forrestbthomas
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.

------
erikb
What other games like this exist out there?

~~~
Houshalter
[https://www.reddit.com/r/programminggames/](https://www.reddit.com/r/programminggames/)

[https://www.reddit.com/r/gameai/comments/v86kk/list_of_games...](https://www.reddit.com/r/gameai/comments/v86kk/list_of_games_suitable_for_msc_ai_project_ai/)

------
TomAnthony
Cool idea!

I registered yesterday but today I can't login. The 'login with github' button
doesn't do anything (just reloads the page).

Also the leaderboard seems to breakdown if you interact with it for a bit -
just stops updating.

~~~
gjtrowbridge
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.

Thanks for bearing with us!

~~~
TomAnthony
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. :)

~~~
forrestbthomas
Interesting...We'll take a look at that. Sounds like something with our OAuth
redirect. Thanks so much for the update!

------
mooogs
UI seems to be broken
[http://s15.postimg.org/p26vhk2p7/Screen_Shot_2014_10_07_at_9...](http://s15.postimg.org/p26vhk2p7/Screen_Shot_2014_10_07_at_9_06_22_PM.png)

~~~
forrestbthomas
Thanks for the note and the screenshot. Should be fixed now.

~~~
alxeder
no it is not:
[http://s27.postimg.org/b06o5rls3/Unbenannt.png](http://s27.postimg.org/b06o5rls3/Unbenannt.png)

~~~
gjtrowbridge
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.

------
rasz_pl
>Each day your code will be assigned to a team at random

so today (500 diamonds vs 7) server randomly assigned one guy that dominates
vs 10 pretty bad players?

~~~
gjtrowbridge
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.

------
mweibel
Pretty awesome and good instructions on how to start!

What would be nice to see when the next battle will start (probably localized)
:-)

~~~
gjtrowbridge
At the moment, the battles run a bit after midnight (PST) each day. Thanks for
the feedback--we can make this a bit more obvious on the site.

~~~
FigmentEngine
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.

really great by the way!

------
Mangalor
So Vindinium in JS. Not a bad idea.

~~~
gjtrowbridge
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).

------
oakleon
The "see todays battle" renders incorrectly on chrome Version 38.0.2125.101
beta

~~~
gjtrowbridge
Thanks for the heads up--working on it now, should be back up in a couple
minutes. I'll follow up when it is.

~~~
gjtrowbridge
It should be up again--let me know if you're still having trouble viewing it.

------
jabbrass
Awesome work, I think that this is a great way to ease into writing basic AI
in JS.

~~~
gjtrowbridge
Thanks!

------
goldfeld
This is great! Would ClojureScript (or other languages compiling down) do?

~~~
gjtrowbridge
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.

Hope that helps.

