Joined: 4/25/2004
Posts: 615
Location: The Netherlands
Well, this is about the best I can do:
With this, perhaps the name should be The Marob Contest :p
But I like the logo thing as well! My ps skillz are just suck suck.
Joined: 4/25/2004
Posts: 615
Location: The Netherlands
Ah fuck the stats.
I've set up a little website for it.
It's very plain, but "designed" that way (read: too lazy to actually design anything, also because I'm not a designer).
Anyways, that's basically what I had in mind.
Gotta work on a submit system and what not, but I figure that stuff can be done later since it's not required right now.
We do need to make sure all bases are covered though. Are we going to work with a framework? Or just try without for the time being? What game will we do first? A lot of people showed interest in Bomberman. Is the timeframe ok? Or should it be longer/shorter? Etc.
Link: http://cbc.qfox.nl/
(Name is still up for grabs, but I'm going with "Console Bot Contest" for now)
Well Bomberman does sound fun, but if we're doing multiplayer we'd definitely need a framework to account for not knowing which player you are in advance like Xkeeper was saying... I say just pick a random 1 player game for now, see how it goes :D
Joined: 4/25/2004
Posts: 615
Location: The Netherlands
Ah I missed that point, but that's a good point.
I guess Arkanoid or Tetris are too generic for this. What about Dr Mario or another point scoring game?
I hope I'm missing something here, but shouldn't this be as simple as:
mzPlayer=3;
switch (mzPlayer){
case 1:
mzRamX=0x709875;
break;
case 2:
mzRamX=0x705829;
break;
case etc etc etc
}
if (mzRamX < 10)
joypad.set(mzPlayer,right);
I don't see how multiplayer games are a problem. If you can't do this basic stuff, maybe you shouldn't even bother to join the contest.
Anyway, I think puzzle games are really boring. If we end up picking Arkanoid, Tetris, Dr. Mario, Klax, Loopz or Q*bert, I guess I'll skip this one and wait for another game (hopefully entertaining to watch and which requires at least a little bit of creative programming).
Trash talking huh? We'll see ;)
It would still need some sort of framework to tie multiple bot scripts together; not hard, but I was just suggesting start small and go from there...
Uh, maybe not even case statements.
Make the code 'blockable', so DK_Player = memread(player_byte)
Force everyone's variables to start with a letter code, like DK for me, ALD for alden, etc. Then, copy paste them to a file, and have them 'duke it out'
Also, I'd rather see bomberman start from a savestate at the beginning of a couple levels.
Sage advice from a friend of Jim: So put your tinfoil hat back in the closet, open your eyes to the truth, and realize that the government is in fact causing austismal cancer with it's 9/11 fluoride vaccinations of your water supply.
Joined: 1/16/2008
Posts: 358
Location: The Netherlands
While this statement does not exclude it, (imo it does suggest it) i think versus-bots should play in a point-based championship (not a knock-out system). Because it very well might be the case that someone builds a bot thats very poor at battling player X but very good overall (I've seen this happen in a tourny i joined)
Fair enough, but the number of reruns should be made available before the people start scripting
e.g. One can't rely on a 'try a few random goes' approach with two runs
Joined: 4/25/2004
Posts: 615
Location: The Netherlands
mz: any suggestions?
In all fairness, I did mean knock-out system but a matrix system can work if that's preferred. Also makes multiple passes easier to do :)
Yes, the aim is to publish every detail about a contest at the start of one.
For multi-bot contests... I suggest a rerecording netplay mechanism which allows for the bot to
1) play a few frames ahead guessing what kind of input the opposite player(s) will provide
2) redo, and this time, wait until the recipient provides input, then go ahead synchronously
It would use a centralized server for netplay.
The synchronization goes like this (pseudocode):
main_loop: my_input = generate_my_input() server::submit(gameno, my_input) input_array = server::get_frame(gameno) for i=0,3 do joypads.set(i, input_array) end emulator.frameadvance() goto main_loop</pre>
The server would respond to the following kinds of messages:
Message Input Output REGISTER gameno,ctrlno errno SUBMIT gameno,ctrlno,input errno (stalls until all clients have issued and returned from the GETFRAME query of the previous frame) GETFRAME gameno inputarray (waits until all ctrls have been submitted)
I suggested Bomberman in my first post. :P
What I'd like is any game where every bot would behave differently. Those puzzle games, besides being boring, will all look the same; you won't even have to use creativity at all when coding. It'd be just a boring mathematical problem which could be solved with only trial and error.
If you want simple games to start, I think even this piece of crap is better than those games.
About the framework, I leave that to those who know. :P I'd be happy with only copy pasting to a single file, as DarkKobold suggested.
Joined: 1/16/2008
Posts: 358
Location: The Netherlands
I'm still all for the bomberman idea, but i think for a single-player-scoring game, Ms. PacMan would be good based on an article i linked earlier (in another topic):
http://www.robotworldnews.com/100389.html
Allright, in case someone is interested of a multiplayer LUA contest, I created a framework for it on LUA.
Source code:
― http://tasvideos.org/Bisqwit/LuaFunctions.html#MultiplayerLuaBotFramework
It requires these LUA extensions to be installed:
― http://luaforge.net/projects/luasoap/ (in Debian, aptitude install lua5.1-soap-dev)*
― http://luaforge.net/projects/bitlib/ (in Debian, aptitude install lua5.1-bit-dev)
(The bitlib dependency can be removed by changing the bit.band into an AND, but this function was not available to me during standalone testing, so I used bitlib instead.)
The server for communicating these matches has been started. It can run multiple simultaneous matches, but each match must be configured beforehand, with a list of passwords for each player (to prevent the bots form screwing up other players' or other games' input).
For the testing, I have preconfigured 30000 two-player games, each of them having "password" as the password for both players. Just use the number (e.g. 0x1) as your gameno, and "password" as your password. Negotiate the gameno you use with your partner. Valid game numbers are from 0x1 to 0x7530.
*) Requires LuaExpat and LuaSocket.
I would recommend against any (relatively highly) luck-based games, obviously, such as Pinball.
While it may seem like a good idea initially, compare the two bots I have for it, Alden's, which just uses generic "hitbox" testing and doesn't support the minigame; and mine, which uses a weak form of prediction and different hitboxing, as well as supporting the minigame partially (enough to win it by accident on several occasions):
(Left: Alden's; Right: Mine)
Otherwise you risk having a real mess.
Joined: 4/25/2004
Posts: 615
Location: The Netherlands
It's a nice framework, but don't you think the latency will make battling over a network take forever and ever?
I'd prefer some framework that gives each agent a certain timeframe to do their computations and cutting them off when this limit has been reached, continuing the frame when all agents are done (one way or the other) untill a certain number of frames (or whatever goal) have been reached. This framework can then also pass on information like the playernumber for that bot.
In such a framework, the agent can do whatever it likes in his time. When the framework advances a frame each agent is asked for it's input, the framework sets the input accordingly and advances one frame.
The system should be easy, not sure about timing issues (since regular Lua has no Threads or anything).
The reason we weren't picking versus games yet was because there was no such framework. But if you guys want to start with a versus game, a decent framework has to be agreed uppon, created and tested. Before the contest starts (obviously) :)
Hmm... Perhaps 300*nplayers milliseconds per frame? 0.6 seconds per frame? Yeah, that might be true. 36 real seconds per a game second.
If that inconvenience is a problem, then yeah, we've got no solution.
So I suppose the right solution is not to run it through the network, but instead, a single LUA program that runs all the bots simultaneously (maybe under different forks/threads) or in sequence, synchronizing them at some points...
That just means you've got no means to test it unless you've got the source code of the other bots.
Joined: 4/25/2004
Posts: 615
Location: The Netherlands
My intent was always to have scripts submitted and one person (or whoever run it) actually running the bots. Taping performance or whatever. I don't really see a network come into play here.
Although you may have unintentionally created a netplay server for FCEUX and Snes9x ;) :D
But the way I see it is that the contestants have to submit their work before the deadline. The last submission will be the one used. Once the deadline is over the bots will be set up and ran. Video's will be made (if this is feasible, uploading multiple passes of this is going to be a biiiiiitch, and maybe boring, but may also be the only "fair" way?) and the results posted.
I do suppose there is some trust involved here as the judges are the only ones that actually run the stuff. Aside from deterministic bots (obviously), what's to say a judge won't just use the worst case of somebody's bot. But dunno how other people look at that possible issue. Obviously judges won't compete. But that's about as much as I can do about bias.
That's why I think deterministic bots are more interesting in this case... Using random numbers and savestates feels like rolling dice to me :) But I suppose they would probably be more successful. Mario Bros sounds good to me too
Joined: 4/25/2004
Posts: 615
Location: The Netherlands
Hmmm, there are pro's and cons to deterministic bots. Trust would however no longer be an issue, as it would be as if you're playing back a movie; everybody should see the same results.
Joined: 4/25/2004
Posts: 615
Location: The Netherlands
Ok, I've asked zero (the lead programmer on FCEUX) and he'll add a special function in Lua for this purpose. I hope DeHackEd will add a similar function to Snes9x some day.
I've also started on the framework, which looks something like this:
http://lua.pastey.net/97692
I haven't tested this at all (right now I don't even know whether _G actually works ;) but this is basically what I had in mind. Note that fceu.run(x,y) is a function that executes function x for max y operations. I think operations is the best thing because it makes things deterministic for in as far time goes (meaning people can test their bots properly at home and the speed of the judges machine won't matter).
Also, I just thought about the movies and the result should obviously be recorded and published on the site as fceux/snes9x movie (and youtube later).
Sage advice from a friend of Jim: So put your tinfoil hat back in the closet, open your eyes to the truth, and realize that the government is in fact causing austismal cancer with it's 9/11 fluoride vaccinations of your water supply.