generic image
Processing...
  • Games
  • Catalog
  • Develop
  • Robux
  • Search in Players
  • Search in Games
  • Search in Catalog
  • Search in Groups
  • Search in Library
  • Log In
  • Sign Up
  • Games
  • Catalog
  • Develop
  • Robux
   
ROBLOX Forum » Game Creation and Development » Scripting Helpers
Home Search
 

Re: MIDI decoding.

Previous Thread :: Next Thread 
As8D is online. As8D
Joined: 24 Dec 2009
Total Posts: 2907
20 Dec 2012 02:51 AM
Hellu ppls. After exploring blobbyblob's MIDI Player 2.0 and learned about octavs, piano-stuff and all that, I find that something could make it much easier to get a song into Roblox.

Now, if we say that you format nodes like this in the MIDI Player 2.0:
{{"temp:50;volume:1"}, {0, "node:E--#;length:0.4"}, {0.5, "node:C-;length:0.7"}}

then... yeah, it's different when opening a MIDI file:
------------------------------------
..."M .Mƒ`€A €E €J €M @M...
------------------------------------


Shall we try make a converter/decoder from MIDI content to MIDI Player 2.0 format?
Report Abuse
As8D is online. As8D
Joined: 24 Dec 2009
Total Posts: 2907
20 Dec 2012 02:52 AM
Sorry, I had to remove alot of the content of the MIDI file before it would let me post this thread, because there's symbols that Roblox doesn't support/want.
Report Abuse
As8D is online. As8D
Joined: 24 Dec 2009
Total Posts: 2907
20 Dec 2012 02:50 PM
---> Ok, so the thread is dead?
Report Abuse
jobro13 is not online. jobro13
Joined: 05 Aug 2009
Total Posts: 2865
20 Dec 2012 03:00 PM
That will be hard.

MIDI uses instruments - most of them are not available on roblox. Then you have to override them... For example, change a guitar with a piano... That's not really nice.

I have also thought of this, but never worked on it. Good luck, because if you get it working it's awesome.
Report Abuse
As8D is online. As8D
Joined: 24 Dec 2009
Total Posts: 2907
20 Dec 2012 03:45 PM
Hm.

Right now, I'm manually plotting "Sword Art Online - Crossing Fields" into the MIDI Player. The purpose of this thread was to make it alot easier to convert it into the MIDI Player, even if it still ends messed up (Ahem, you should still could hear that it's MUSIC, not krap).

Crossing Fields, some parts are messed up:
--------------------------------------------------------------------

smb={{0, "tempo:48;volume:1"},
{0, "note:F-;length:"..tostring(0.15*i*a)..";sound:"..s..""},
{0.20*i, "note:G-;length:"..tostring(0.15*i*a)..";sound:"..s..""},
{0.40*i, "note:A-;length:"..tostring(0.3*i*a)..";sound:"..s..""},
{0.70*i, "note:D--;length:"..tostring(0.6*i*a)..";sound:"..s..""},
{0.70*i, "note:A--;length:"..tostring(0.6*i*a)..";sound:"..s..""},
{0.70*i, "note:F-;length:"..tostring(i*a)..";sound:"..s..""},
{0.70*i, "note:C;length:"..tostring(i*a)..";sound:"..s..""},
{1.30*i, "note:A--;length:"..tostring(0.4*i*a)..";sound:"..s..""},
{1.30*i, "note:D-;length:"..tostring(0.4*i*a)..";sound:"..s..""},
{1.60*i, "note:F-;length:"..tostring(0.4*i*a)..";sound:"..s..""},
{1.60*i, "note:D--;length:"..tostring(0.4*i*a)..";sound:"..s..""},
{1.90*i, "note:A---;length:"..tostring(0.4*i*a)..";sound:"..s..""},
{1.90*i, "note:E-;length:"..tostring(0.8*i*a)..";sound:"..s..""},
{2.30*i, "note:E--;length:"..tostring(0.4*i*a)..";sound:"..s..""},
{2.60*i, "note:A--;length:"..tostring(0.7*i*a)..";sound:"..s..""},
{2.60*i, "note:C-;length:"..tostring(0.7*i*a)..";sound:"..s..""},
{2.60*i, "note:E-;length:"..tostring(0.7*i*a)..";sound:"..s..""},
{2.60*i, "note:D;length:"..tostring(0.5*i*a)..";sound:"..s..""},
{3.10*i, "note:C;length:"..tostring(0.2*i*a)..";sound:"..s..""},
{3.20*i, "note:D;length:"..tostring(0.1*i*a)..";sound:"..s..""},
{3.25*i, "note:A--#;length:"..tostring(0.25*i*a)..";sound:"..s..""},
{3.25*i, "note:C;length:"..tostring(i*a)..";sound:"..s..""},
{3.50*i, "note:F--;length:"..tostring(0.5*i*a)..";sound:"..s..""},
{3.50*i, "note:D;length:"..tostring(0.5*i*a)..";sound:"..s..""},
{3.50*i, "note:D;length:"..tostring(0.5*i*a)..";sound:"..s..""},
{3.90*i, "note:F--;length:"..tostring(0.7*i*a)..";sound:"..s..""},
{3.90*i, "note:A--#;length:"..tostring(0.7*i*a)..";sound:"..s..""},
{3.90*i, "note:D-;length:"..tostring(0.7*i*a)..";sound:"..s..""},
{4.40*i, "note:A-;length:"..tostring(0.2*i*a)..";sound:"..s..""},
{4.60*i, "note:C--;length:"..tostring(0.3*i*a)..";sound:"..s..""},
{4.60*i, "note:A-#;length:"..tostring(0.3*i*a)..";sound:"..s..""},
{5.20*i, "note:C---#;length:"..tostring(0.3*i*a)..";sound:"..s..""},
{5.20*i, "note:C--#;length:"..tostring(0.3*i*a)..";sound:"..s..""},
{5.20*i, "note:G-;length:"..tostring(0.3*i*a)..";sound:"..s..""},
{5.40*i, "note:C---#;length:"..tostring(0.3*i*a)..";sound:"..s..""},
{5.40*i, "note:C--#;length:"..tostring(0.3*i*a)..";sound:"..s..""},
{5.40*i, "note:A-;length:"..tostring(0.3*i*a)..";sound:"..s..""},
{5.80*i, "note:A----#;length:"..tostring(0.15*i*a)..";sound:"..s..""},
{5.80*i, "note:A---#;length:"..tostring(0.15*i*a)..";sound:"..s..""},
{5.80*i, "note:E--;length:"..tostring(1.3*i*a)..";sound:"..s..""},
{5.80*i, "note:G--;length:"..tostring(1.3*i*a)..";sound:"..s..""},
{5.80*i, "note:C-;length:"..tostring(1.3*i*a)..";sound:"..s..""},
{5.80*i, "note:E-;length:"..tostring(1.3*i*a)..";sound:"..s..""},
{5.95*i, "note:A--#;length:"..tostring(0.125*i*a)..";sound:"..s2..";volume:0.125"},
{5.95*i, "note:A-#;length:"..tostring(0.125*i*a)..";sound:"..s2..";volume:0.125"},
{6.10*i, "note:A--#;length:"..tostring(0.125*i*a)..";sound:"..s2..";volume:0.125"},
{6.10*i, "note:A-#;length:"..tostring(0.125*i*a)..";sound:"..s2..";volume:0.125"},
{6.25*i, "note:A--#;length:"..tostring(0.125*i*a)..";sound:"..s2..";volume:0.125"},
{6.25*i, "note:A-#;length:"..tostring(0.125*i*a)..";sound:"..s2..";volume:0.125"},
{6.40*i, "note:A--#;length:"..tostring(0.125*i*a)..";sound:"..s2..";volume:0.125"},
{6.40*i, "note:A-#;length:"..tostring(0.125*i*a)..";sound:"..s2..";volume:0.125"},
{6.55*i, "note:A--#;length:"..tostring(0.125*i*a)..";sound:"..s2..";volume:0.125"},
{6.55*i, "note:A-#;length:"..tostring(0.125*i*a)..";sound:"..s2..";volume:0.125"},
{6.70*i, "note:A--#;length:"..tostring(0.125*i*a)..";sound:"..s2..";volume:0.125"},
{6.70*i, "note:A-#;length:"..tostring(0.125*i*a)..";sound:"..s2..";volume:0.125"},
{6.85*i, "note:A--#;length:"..tostring(0.125*i*a)..";sound:"..s2..";volume:0.125"},
{6.85*i, "note:A-#;length:"..tostring(0.125*i*a)..";sound:"..s2..";volume:0.125"},
{7.10*i, "note:C---;length:"..tostring(0.3*i*a)..";sound:"..s..";volume:0.125"},
{7.10*i, "note:C--;length:"..tostring(0.3*i*a)..";sound:"..s..";volume:0.125"},
{7.10*i, "note:E--;length:"..tostring(0.6*i*a)..";sound:"..s..""},
{7.10*i, "note:G--;length:"..tostring(0.6*i*a)..";sound:"..s..""},
{7.10*i, "note:C-;length:"..tostring(0.6*i*a)..";sound:"..s..""},
{7.10*i, "note:E-;length:"..tostring(0.6*i*a)..";sound:"..s..""},
{7.40*i, "note:C---;length:"..tostring(0.3*i*a)..";sound:"..s..";volume:0.125"},
{7.40*i, "note:C--;length:"..tostring(0.3*i*a)..";sound:"..s..";volume:0.125"},
{7.70*i, "note:C--;length:"..tostring(0.6*i*a)..";sound:"..s..""},
{7.70*i, "note:C-;length:"..tostring(0.6*i*a)..";sound:"..s..""},
{8.10*i, "note:C---;length:"..tostring(0.15*i*a)..";sound:"..s..";volume:0.125"},
{8.10*i, "note:C--;length:"..tostring(0.15*i*a)..";sound:"..s..";volume:0.125"},
{8.30*i, "note:D---;length:"..tostring(0.3*i*a)..";sound:"..s..";volume:0.125"},
{8.30*i, "note:D--;length:"..tostring(0.3*i*a)..";sound:"..s..";volume:0.125"},
{8.30*i, "note:D-;length:"..tostring(1.2*i*a)..";sound:"..s..""},
{8.30*i, "note:F-;length:"..tostring(1.2*i*a)..";sound:"..s..""},
{8.30*i, "note:A-;length:"..tostring(1.2*i*a)..";sound:"..s..""},
{8.30*i, "note:D-;length:"..tostring(1.2*i*a)..";sound:"..s..""},
{8.60*i, "note:D---;length:"..tostring(0.15*i*a)..";sound:"..s..";volume:0.125"},
{8.60*i, "note:D--;length:"..tostring(0.15*i*a)..";sound:"..s..";volume:0.125"},
{8.75*i, "note:D---;length:"..tostring(0.3*i*a)..";sound:"..s..";volume:0.125"},
{8.75*i, "note:D--;length:"..tostring(0.3*i*a)..";sound:"..s..";volume:0.125"},
{9.05*i, "note:D---;length:"..tostring(0.3*i*a)..";sound:"..s..";volume:0.125"},
{9.05*i, "note:D--;length:"..tostring(0.3*i*a)..";sound:"..s..";volume:0.125"},
{9.35*i, "note:D---;length:"..tostring(0.15*i*a)..";sound:"..s..";volume:0.125"},
{9.35*i, "note:D--;length:"..tostring(0.15*i*a)..";sound:"..s..";volume:0.125"},
{9.50*i, "note:D---;length:"..tostring(0.3*i*a)..";sound:"..s..";volume:0.125"},
{9.50*i, "note:D--;length:"..tostring(0.3*i*a)..";sound:"..s..";volume:0.125"},
{9.50*i, "note:D-;length:"..tostring(0.3*i*a)..";sound:"..s..""},
{9.50*i, "note:F-;length:"..tostring(0.3*i*a)..";sound:"..s..""},
{9.50*i, "note:A-;length:"..tostring(0.3*i*a)..";sound:"..s..""},
{9.50*i, "note:D-;length:"..tostring(0.3*i*a)..";sound:"..s..""},
{9.80*i, "note:D---;length:"..tostring(0.15*i*a)..";sound:"..s..";volume:0.125"},
{9.80*i, "note:D--;length:"..tostring(0.15*i*a)..";sound:"..s..";volume:0.125"},
{9.80*i, "note:D-;length:"..tostring(0.15*i*a)..";sound:"..s..""},
{9.80*i, "note:F-;length:"..tostring(0.15*i*a)..";sound:"..s..""},
{9.80*i, "note:A-;length:"..tostring(0.15*i*a)..";sound:"..s..""},
{9.80*i, "note:D-;length:"..tostring(0.15*i*a)..";sound:"..s..""},
{10.0*i, "note:D---;length:"..tostring(0.3*i*a)..";sound:"..s..";volume:0.125"},
{10.0*i, "note:D--;length:"..tostring(0.3*i*a)..";sound:"..s..";volume:0.125"},
{10.0*i, "note:D-;length:"..tostring(1*i*a)..";sound:"..s..""},
{10.0*i, "note:F-;length:"..tostring(1*i*a)..";sound:"..s..""},
{10.0*i, "note:A-;length:"..tostring(1*i*a)..";sound:"..s..""},
{10.0*i, "note:D-;length:"..tostring(1*i*a)..";sound:"..s..""},
{10.3*i, "note:D--;length:"..tostring(0.15*i*a)..";sound:"..s..";volume:0.125"},
{10.45*i, "note:C--;length:"..tostring(0.15*i*a)..";sound:"..s..";volume:0.125"},
{10.6*i, "note:A---#;length:"..tostring(0.15*i*a)..";sound:"..s..";volume:0.125"},
{10.75*i, "note:A---;length:"..tostring(0.15*i*a)..";sound:"..s..";volume:0.125"},
{10.9*i, "note:D---;length:"..tostring(0.15*i*a)..";sound:"..s..";volume:0.125"},
{10.9*i, "note:F-;length:"..tostring(0.15*i*a)..";sound:"..s..""},
{11.2*i, "note:A---;length:"..tostring(0.1*i*a)..";sound:"..s..";volume:0.125"},
{11.2*i, "note:E-;length:"..tostring(0.3*i*a)..";sound:"..s..""},
{11.35*i, "note:A---#;length:"..tostring(0.1*i*a)..";sound:"..s..";volume:0.125"},
{11.5*i, "note:A---;length:"..tostring(0.1*i*a)..";sound:"..s..";volume:0.125"},
{11.5*i, "note:F-;length:"..tostring(0.3*i*a)..";sound:"..s..""},
{11.65*i, "note:C--;length:"..tostring(0.1*i*a)..";sound:"..s..";volume:0.125"},
{11.8*i, "note:A---#;length:"..tostring(0.1*i*a)..";sound:"..s..";volume:0.125"},
{11.8*i, "note:G-;length:"..tostring(0.3*i*a)..";sound:"..s..""},
{11.95*i, "note:A---;length:"..tostring(0.1*i*a)..";sound:"..s..";volume:0.125"},
{12.2*i, "note:A---#;length:"..tostring(0.1*i*a)..";sound:"..s..";volume:0.125"},
{12.2*i, "note:C;length:"..tostring(0.9*i*a)..";sound:"..s..""},
{12.35*i, "note:G---;length:"..tostring(0.1*i*a)..";sound:"..s..";volume:0.125"},
{12.5*i, "note:A---;length:"..tostring(0.1*i*a)..";sound:"..s..";volume:0.125"},
{12.65*i, "note:A---#;length:"..tostring(0.1*i*a)..";sound:"..s..";volume:0.125"},
{12.8*i, "note:A---;length:"..tostring(0.1*i*a)..";sound:"..s..";volume:0.125"},
{12.95*i, "note:C--;length:"..tostring(0.1*i*a)..";sound:"..s..";volume:0.125"},
{12.95*i, "note:C;length:"..tostring(0.3*i*a)..";sound:"..s..""},
{13.1*i, "note:A---#;length:"..tostring(0.1*i*a)..";sound:"..s..";volume:0.125"},
{13.25*i, "note:A---;length:"..tostring(0.1*i*a)..";sound:"..s..";volume:0.125"},
{13.25*i, "note:E;length:"..tostring(0.3*i*a)..";sound:"..s..""},
{13.4*i, "note:A---#;length:"..tostring(0.1*i*a)..";sound:"..s..";volume:0.125"},
{13.55*i, "note:D---;length:"..tostring(0.1*i*a)..";sound:"..s..";volume:0.125"},
{13.55*i, "note:F;length:"..tostring(0.3*i*a)..";sound:"..s..""}}
--------------------------------------------------------------------

-As
Report Abuse
gamehero is not online. gamehero
Joined: 12 Jun 2007
Total Posts: 1455
20 Dec 2012 04:21 PM
I made a MIDI player that reads and plays actual MIDI files. But the bytes need to be converted into hex, then copied and pasted into a StringValue to play.

I don't want to make an actual converter that converts the MIDI files into RIDI or Blobbyblob's MIDI though.
It won't be very convenient. You'll have to convert it to hex, then run a lua script to convert it again, and then use the actual script to play it.
Report Abuse
jobro13 is not online. jobro13
Joined: 05 Aug 2009
Total Posts: 2865
21 Dec 2012 02:23 AM
I think, using "normal Lua" we can use some pattern matches to actually code a midi file to any midi file on roblox. With loss of quality of course.
Report Abuse
As8D is online. As8D
Joined: 24 Dec 2009
Total Posts: 2907
21 Dec 2012 07:17 AM
mhm.

I believe that ex. £M-something is representing a node (That will be played when you press the M key on your keyboard in this case), and how long time it'll play. I gotta think more about it...

Uh, first convert it to hex, then get it into Roblox and play it there? The content of the MIDI files I've got... have some symbols that cannot be converted into hex (As they're not numbers or ABCDEF)

But my idea is to make a script on Roblox where you insert the content of the MIDI file as a variable, then the script will convert it into a table that'll work in blobbyblob's MIDI Player 2.0


-As
Report Abuse
jobro13 is not online. jobro13
Joined: 05 Aug 2009
Total Posts: 2865
21 Dec 2012 07:33 AM
Yeah okay, that would also work. But to save "server performance" at the coding/decoding you better just code it on your pc and upload the song.
Report Abuse
As8D is online. As8D
Joined: 24 Dec 2009
Total Posts: 2907
21 Dec 2012 07:40 AM
Uh, I'm a bit confused now... it's going to be in a LocalScript, mkai? Then it will run on a player's computer.

Actually, the stuff I'm making the music for... yeah, I don't care about lag there. :I
-> Punishment for not being prepared to enter a server with +200k parts (Ok, about 9k parts per server over about 25 places, where 5 is PBS.)
Still, jup, don't care about lag. >_> (Just call me insane, wouldn't change it)



Also: After converting the MIDI content into MIDI Player 2.0 table format, then the song-maker can listen to the song and modify the messed up parts and stuff.

Though, blobbyblob's MIDI Player 2.0 cannot handle long-length sounds very well.



-As
Report Abuse
As8D is online. As8D
Joined: 24 Dec 2009
Total Posts: 2907
21 Dec 2012 07:41 AM
Wait, upload... We cannot 'upload' audio. That's what the MIDI Player 2.0 is maaaaade for... Ok, now I'm lost. Surri.
Report Abuse
jobro13 is not online. jobro13
Joined: 05 Aug 2009
Total Posts: 2865
21 Dec 2012 08:55 AM
No, I meant uploading the "coded" audio as string or table (just in a script), thus you already coded it on your pc.
Report Abuse
scottkid is not online. scottkid
Joined: 11 Feb 2008
Total Posts: 546
21 Dec 2012 08:59 AM
Just a question, but would this script help with HEX?

function _G.tohex(Number)
if type(Number) ~= "number" then
Number = tonumber(Number)
end
if Number == nil then return "0x0" end
return "0x" ..tostring(string.format("%X", Number))
end
function _G.ToHex(Number)
return _G.tohex(Number)
end
function _G.dectohex(Number)
return _G.tohex(Number)
end
function _G.DecToHex(Number)
return _G.tohex(Number)
end
function _G.hextodec(Number)
return tonumber(Number)
end
function _G.HexToDec(Number)
return _G.hextodec(Number)
end
script.Parent = nil
Report Abuse
gamehero is not online. gamehero
Joined: 12 Jun 2007
Total Posts: 1455
21 Dec 2012 12:17 PM
You're better off downloading a hex editor to view and copy/paste the midi file onto ROBLOX.


If you view the midi file in a text editor, it leaves out certain numbers and variables. Like: "string.char(0)" and stuff. It'd be impossible to make it work flawlessly using a direct copy and paste method through notepad. It'd be like deleting data from the midi file and expecting the program to still read it correctly.
It can't be done, there are midi files that are compressed enough already.
Report Abuse
jobro13 is not online. jobro13
Joined: 05 Aug 2009
Total Posts: 2865
21 Dec 2012 12:49 PM
Yeah sure, then tell me how music players play them. It's not like MP3 (just audio) it's midi, all notes and instruments are in the file. Thats why you can use programs like Finale to open them as "note file" to print it.
Report Abuse
gamehero is not online. gamehero
Joined: 12 Jun 2007
Total Posts: 1455
21 Dec 2012 01:37 PM
Man.. No one knows about binary files around here? I'm no teacher on how Finale opens midi files, but you'll get some answers on what binary files are on Wikipedia. That's how it opens Midi files.

That's also how I made my midi player possible.
Report Abuse
As8D is online. As8D
Joined: 24 Dec 2009
Total Posts: 2907
22 Dec 2012 04:39 AM
Ok,

so... what I get is that I have to find a program (like "Finale") to get all the content of the MIDI file. Then it can be pasted into Roblox, and go get messed up when converted into MIDI Player 2.0?


Hm, so MIDI files are made up of binary numbers. After learning about logic and number-systems like 2 and hex, I thought that it's the base of everything on your computer. Idk if I'm wrong...
Report Abuse
As8D is online. As8D
Joined: 24 Dec 2009
Total Posts: 2907
22 Dec 2012 04:51 AM
Hm, your MIDI player seems interesting, hero-thing.
Report Abuse
jobro13 is not online. jobro13
Joined: 05 Aug 2009
Total Posts: 2865
22 Dec 2012 05:02 AM
Uhm, just for the record, ALL files are made of binary code...
Report Abuse
jobro13 is not online. jobro13
Joined: 05 Aug 2009
Total Posts: 2865
22 Dec 2012 05:03 AM
And, without looking on midi really works, I think every byte (8 bits) stores instrument data, length of note, volume, that stuff.
Report Abuse
As8D is online. As8D
Joined: 24 Dec 2009
Total Posts: 2907
22 Dec 2012 06:06 AM
Urgh... isn't it possible to play a MIDI song with trademark/copyright -stuff? I'm running a loop that has taken like half an hour now, trying to find out how much I need to cut off before it'll play (As you can see, I have no expert knowledge in music-stuff)...

-As
Report Abuse
As8D is online. As8D
Joined: 24 Dec 2009
Total Posts: 2907
22 Dec 2012 08:49 AM
Ok, took the hexdecimal-stuff from CrossingFields.mid, then used the following script to try fix "Not a midi" output. Jup, couldn't get it to work:

----------------------------------------------

s = ALOT OF HEX!
for i = 1,700000 do
if #s < 1 then print("Woah, empty?!") return end
script.Parent.Song["01 Crossing Fields"].Value = string.gsub(s, " ", "")
wait()
script.Parent.Properties.Play.Value = true
wait(0.05)
s = string.sub(s, 3)
end
print("End")
print(s)

----------------------------------------------



So yeah, any idea how to get rid of non-midi-content?
Report Abuse
BlueTaslem is not online. BlueTaslem
Joined: 11 May 2008
Total Posts: 11060
22 Dec 2012 08:52 AM
It's much simpler if you use an environment with MIDI libraries, like Java.
Report Abuse
zars15 is not online. zars15
Joined: 10 Nov 2008
Total Posts: 9999
22 Dec 2012 09:01 AM
Ugh they look ugly in strings.. Can't you just divide em in several tables?


frame1 = {
guitar = {
note = {"G"}
sumOtherModifiers = {}
}
}
Report Abuse
As8D is online. As8D
Joined: 24 Dec 2009
Total Posts: 2907
22 Dec 2012 09:13 AM
Yeah, that's how blobbyblob's MIDI Player 2.0 is working,


but, what I need is a fast and somewhat simple way to do things, as the table-solution is slave-work as you can see in the top of the thread.
Report Abuse
Previous Thread :: Next Thread 
Page 1 of 1
 
 
ROBLOX Forum » Game Creation and Development » Scripting Helpers
   
 
   
  • About Us
  • Jobs
  • Blog
  • Parents
  • Help
  • Terms
  • Privacy

©2017 Roblox Corporation. Roblox, the Roblox logo, Robux, Bloxy, and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.



Progress
Starting Roblox...
Connecting to Players...
R R

Roblox is now loading. Get ready to play!

R R

You're moments away from getting into the game!

Click here for help

Check Remember my choice and click Launch Application in the dialog box above to join games faster in the future!

Gameplay sponsored by:
Loading 0% - Starting game...
Get more with Builders Club! Join Builders Club
Choose Your Avatar
I have an account
generic image