
Blog
-
WWC Results!
WWC Contest Winners! These players will get a message from me shortly with information on how to collect their prize.
| March 19, 2007 -
Building Contest Status
The World Wonder Contest ended last night at midnight, Pacific Standard Time. We are tallying the results and doing some database audits to make sure everything is on the up and up, then we will release the standings.
| March 18, 2007 -
A Day at the Nueva School
David Baszucki and I spent today hanging out at the Nueva School’s science fair, where we had a room set aside to do Roblox user testing. We had about 60 kids total play around in a clone of the Community Building room over the course of 4 hour...
| March 12, 2007 -
A Day at the Nueva School
Builderman and I spent today hanging out at the Nueva School's science fair, where we had a room set aside to do Roblox user testing.
| March 12, 2007 -
Building Contest: Wonders of the World
By popular demand we are holding another building contest! The theme of this contest is the Four Wonders of the World. You might ask why only four, instead of seven.
| March 11, 2007 -
Name that ROBLOXian…
We introduced phase one of ROBLOX character customization last night. Kudos to Erik and Matt for their heavy lifting on this.
| March 8, 2007 -
Game Developer’s Conference
Team Roblox is going to the annual Game Developer's Conference in San Francisco this week.
| March 06, 2007 -
Fire in the Valley Rekindled
Builderman and I hit the Stanford startup job fair on Thursday, looking to recruit a few good software developers for the Roblox team.
| March 4, 2007 -
Fire in the Valley Rekindled
David Baszucki and I hit the Stanford startup job fair on Thursday, looking to recruit a few good software developers for the Roblox team. The fire in Silicon Valley is roaring again and Computer Science majors can’t walk down the street withou...
| March 4, 2007 -
Dear Telamon…
This morning is a momentous occasion. I am emptying my Inbox. Often people send me messages like “… so-and-so was calling me names, please do something…” or “yo dude, give me a custom character plz…”. However, occasionally I get some interesting questions to which I send a thoughtful response. I’m going to start posting some of these. The first is from MrDoomBringer, with whom I exchange several messages a week. MrDoomBringer writes: p Your question touches on two issues: parametric/custom parts and simulation efficiency. The Roblox team has been thinking about adding additional parts to Roblox for a long time. The obvious way to do it would be to add a 3d modeler tool to Roblox Studio that would let you build your own meshes and then create parts out of them. This is probably not a great idea, since 3d modeling is very hard and writing 3d modeling software is not my idea of fun. The way we would introduce new parts would probably be to make parametric parts. For instance, we might make a Window part that you could resize however you wanted, and Roblox would automatically make a nice Window mesh for you, of any size or style that you chose. But to answer your question more directly, we don’t do general-purpose mesh collision detection by default because it is very slow. The only shapes the Roblox physics engine has to worry about right now are boxes and spheres. That means we have to be able to detect 3 types of collisions: Sphere-Sphere, Box-Box, and Box-Sphere. All of these tests are relatively quick to compute - in particular a Sphere-Sphere test is a trivial application of the distance formula. To do general-purpose (often called “Triangle Soup”) collision detection between two objects is very slow. Say I have two user-made meshes that both contain 1000 triangles. I basically have to do 1000^2 tests to see if the two soups are colliding. You can do a little better if you enforce the constraint that the meshes have to be “water-tight” - meaning that there is no path that can be drawn from the inside of the mesh to the outside of the mesh without passing through a face of the mesh. The best way to test for collisions between two “water-tight” meshes is to break the meshes up into convex hulls (if the mesh is not already convex). This can be done once, at resource load time, so does not hurt performance. But then you have to do convex hull collision tests. With various gnarly optimizations you can do these in O(lg n) time against Spheres and Boxes, and O(n lg n) time against other hulls. In comparison, all current collision tests can be done in O(1) - constant time. The bottom line is that we will need to add convex hull collision to the engine someday, but that in order to get good performance we need to be very judicious in choosing when to do the more expensive collision test and when a simple sphere will serve to approximate an object’s geometry. If we did convex hull collision by default and a user makes a pile of 100 rocket launchers, the result is not going to be good. It’s a bigger problem that it seems, which is why it was not thrown into the physics engine when BM first wrote it. If you are interested in learning more about collision detection in games, here are two excellent sources of information: a a - Telamon
| February 26, 2007 -
Where are they now?
The Roblox Team just shipped a fabulous release last week and are celebrating their achievements by living it up on Builderman’s yacht in the Key West, while catching up with some other 49er alumns. Hot tubbin’ it (on the yacht, ‘natch) after a long day of scuba diving, we were discussing the features we are each working on for the next big release. Matt has been working on DB caching to improve website speed and has been working on backend stuff for customized characters. Erik has been working on webpage GUI stuff for customized characters, while kicking back pina coladas and reading through all the dump files that people have been sending him when Roblox crashes. Since the last deploy, we’ve been getting 60% fewer of these. Builderman was busy waterskiing backwards, and so missed most of the team meeting. Though he did shout to us about characters and humanoids and something about slowing down the boat. I’ve been continuing my valiant crusade towards making Capture the Flag games a reality. Next step: Player Spawn Locations. The most exciting feature for scripters in the next release? It’s a little something called a DHTMLWindow. At least I’m excited about it. - Telamon
| February 23, 2007 -
Badges, Statistically Speaking
Have you ever wondered what the most rare badge on Roblox is? Or which is harder to get: the Bloxxer Badge or the Bricksmith? I was wondering the same thing myself on Friday and I found some interesting numbers out of our database. I put together this table (data from February 16th): What does this show? Well first, the Count column tells us how many accounts have earned a particular badge. For example, we can see that, as of Friday, there are 103 Bloxxers on Roblox, but only 25 Bricksmiths. This means it is roughly 4 times harder to get a Bricksmith badge than a Bloxxer. Even more interesting is that almost no one has earned the Inviter badge - it is the rarest badge on Roblox. There are more Admin badges out there than Inviters! a - Telamon
| February 20, 2007 -
Place Protection – quick update
Many people have requested a way to prevent others from
| February 17, 2007 -
Code Bomb
We’ve just pushed a Tools and Teams are both Some initial Tools and Team docs have been published to the wiki - I may write some articles soon that show how to use them in your maps. Post any bugs you find to the Support forum - we will be working through these Friday and early next week for the next release. - Telamon
| February 16, 2007 -
Scripting with Telamon: Debugging
Howdy! Today’s article is for Roblox power users who want to learn how to develop scripts in Roblox.
| February 15, 2007 -
Scripting with Telamon
Howdy! Today’s article is for Roblox power users who want to learn how to develop scripts in Roblox. This is not a programming language tutorial - I will assume you know enough about lua to look at a piece of code and guess at what it does. Rather I am going to teach you how to deal with buggy scripts and show how to debug them. Debugging in general is a mystical art - I use the word “art”, which is the product of innate creative forces, in constrast to “science”, which can be dissected, reduced, and taught. We’ve built some tools into Roblox Studio to help you though. strong We’re going to build a secret door. An easy way to make a secret door is to make a brick and set its CanCollide property to false. Anyone can them walk through such a brick. No. Our secret door is going to be special. It’s eventually going to guard the treasure room in my castle and it’s only going to let approved members of the Pirate Army through (Arrrrr!). Clearly we need some scripting here, me hearties. strong When I’m making a complicated script, I try to test it as I go along. I’ve seen a lot of people in intro programming classes try to write all their code at once and then test it. This is about the most painful way to write code. Don’t do it. Instead, write the shortest bit of code that you can test. Test it. If it works, add some more stuff. Then test it. If something broke, you know where to start looking. A more simple version of the door we want to make is a door that just turns transparent whenever anything touches it. a strong Ok, time to break out the power tools. If you have been scripting without these, I feel sorry for you. There are two that I will talk about today: the Output window and the Command toolbar. The first is by far the most useful, so I will focus on it. To bring up the Output window, use the View -> Output menu option. This is add a window pane to the bottom of your screen. This window will show the output from your scripts while they are running. If your script has an error in it, the error will be printed here along with the line number telling you where the script broke. Let’s look at both of these right now. In your new script, paste the following code: p As you can probably tell, this script prints “Hello world!”, spits out the numbers 1 to 10 and then crashes on an error. If you press the Run button in Studio, you can see this. The output will look like this: p This is telling us that line 7 of our script is bad, which is something we already knew. However, in a more complicated script, it can be very helpful to print out stuff as the script is running so that you can see where things are going wrong. It may seem obvious once I’ve said it, but if something is broken with your script, start printing stuff out - rare is the bug that will not succumb to this level of scrutiny. I once wrote an entire operating system, using only printf to debug it. a p And if you have a part named “Door” in your level, it will be immediately teleported to (0, 100 ,0) while the game is running. This is kindof arcane, but I mention it because I have found the Command Toolbar useful on occassion. strong Here it is: p If you have ever seriously tried to learn lua scripting for Roblox, you have looked at some Roblox scripts. The code for listening to a Touch event should look familiar. Basically I have wired up the Part.Touched event to call the onTouched function whenever the part is touched by another part. When this happens, the door will turn semi-transparent for 5 seconds. Add this to your Door script, save your map, and try it. If you touch or shoot the door, you will see a nice effect. If you have the Output Window up, you will also see a “Door Hit” message printed whenever the door is touched. If you did not see this message, you would know that the onTouch function was not being called and that you had not wired up the event handler correctly. strong Like I said, this is not a tutorial on actually writing code, only debugging it. So here is the finished script: p It has one bug in it. Without using the Output Window, the only thing you will be able to tell is that the script is not working. With the Output Window, the problem becomes obvious: p Since the script prints out “Door Hit”, but not “Human touched door”, we know the problem is somewhere in line 18 or 19 of the code. The Output window tells us that there is a problem on line 18 - findFirstChild is failing. Ah! That is because in Lua methods are invoked using a colon (:) instead of a dot (.) (all other languages of consequence use dots for this - curse the inventors of Lua!) Change the line 18 to be: p a - Telamon
| February 14, 2007 -
RobloxPolice Gives the Low Down on RobloxPolice
strong This week we reprise our Reports From Robloxia column, written by you, the citizens of Robloxia. This week’s article is written by RobloxPolice, one of our most accomplished builders and owner of the current #1 all-time most popular place on Roblox. Due to his skills and possibly his account name, people often assume that RobloxPolice is an official Roblox moderator or admin. To set the record straight: this is not the case. Rest assured, the Roblox Team has strong libertarian leanings; we would never set up a police state in Robloxia. Enough introduction, let’s see what RP has to say… - Telamon strong strong A lonely programmer like me writing an article to an international hit! Hi, this is RobloxPolice and I’m here to give the scoop and me and the Police Force of Roblox. A lot of people have been asking me who I am, so I’ll start there… strong a strong Well the Police Force is open to the best of Roblox. In order to join you have to be an honest trustworthy person above all! The Police Force is here to help and serve the community of Roblox! Here are the requirements for joining as I posted them in the forums: strong strong I’m not gonna tell you it’s as easy as pie! But I’m sure strong Well I can’t release to many details, but yes. There are some goodies coming. There’s some low level secrets like new maps and a new “competition” or “tournament” coming from the Police Force to see who really is the best of Roblox. I plan to start developing more new game types and possibly the First RPG map of Roblox History. But we’ll see what happens. strong I don’t just make awesome maps: sometimes I visit awesome maps and talk to other awesome people! So I’ve compiled a list of my top 5 favorite maps not affiliated with me… - RobloxPolice
| February 7, 2007