Game-making for gamersAn online cooperative platform to make games and movies

In a nutshell...I'm building a game / platform named CraftStudio. It features block-based 3D modelling, a voxel map editor and (optionally visual) scripting. And it's all real-time: you can make a game (or movie) just like you would play Minecraft, with a bunch of buddies. Setup a project, invite your friends and start building awesome stuff!

Some games made with CraftStudio

Why?I think making a good game is hard for the wrong reasons. Mechanics, graphics, sfx, story, levels, fine tuning, testing... All of this is hard work that will make it into the game, and that's fine. That's what game dev is about!

What's sad is that there's an *awful lot* of technical stuff you need to learn, making it very hard to get into game dev. Not everyone needs (or wants) to learn a bazillion programming tricks. I want to let more people jump right in and have fun making art/games/movies/whatever.

So, yeah, that's why I'm building CraftStudio. And also because I'd love to make games with friends (and get to know people while making games, too!).

Core featuresThere are great tools like Construct, Game Maker, Unity, etc. doing a good job of making game dev more accessible. But I want more:

It's real-time collaborative: everything you do happens right on the server. You can interact with your friends, tweak a 3D model, a texture, a behavior together, in real-time.

It includes pretty much everything you need: models, maps, scenes & scripts are all created within CraftStudio. (Hopefully sounds & musics too at some point!)

It's gamey: Game dev is exciting, challenging, rewarding. By taking out the technical hurdles, it pretty much becomes a game of its own.

And you can make games with it already!I've been working on CraftStudio for the past year or so. You can create and animate models, make maps, scenes, edit documents and scripts together in real-time then export your game and play it. In this devlog, I'll try to talk about design decisions, technical challenges and other interesting stuff I struggle with as I'm making progress.

CraftStudio has now reached Alpha status, the Premium version is available right now for 15 € (50% off from the final price). The free version is still available but you'll need a Premium account for scripting and to export your games.

Awesome. I cannot give specific feedback at this time as I am Mac only for a bit, but the idea makes me happy. It sounds like you have enough working to ease fears of this being the dream of some rank beginner (I did not read your bio, if you are a beginner you must be more skilled than most). I look forward to trying this once I get the Windows machine.

Wow, thanks for the kind comments . (Oh, and sorry about your jaw Gimmy, I think I saw it slip down the stairs ...)

Anyway, let me know if there's anything specific about the dev process you'd like me to write about. For now I'm just going to give some background info about what's involved and how it all works together.

Web-apps are hard, let's go shopping

I started building CraftStudio as a Web app back in August. It made a lot of sense to avoid having people download & install an app. It would have spared me the effort of creating an update system, too.

The now-defunct Web version of CraftStudio

It used WebSockets (through the pretty awesome SocketStream library) & WebGL. But I came to the realization that it was just too much work for a very uncertain result: WebSockets are TCP-only (which implies latency issues), WebGL was (and still is for the most part) pretty experimental, and building a complicated app UI on the Web is a PITA. Finally, allowing people to host their own projects seemed pretty complicated, and the server costs involved with hosting everyone's projects sounded a little... overwhelming :D.

Switching to a desktop app

I started full-time work on CraftStudio around mid-September. Having put many hours in the initial Web version, I agonized for quite some time over the decision of switching to an actual desktop app .

Previously I had been working with XNA on another game (QuadSmash) and had just started an UI framework as part of Nuclear Winter, a bunch of libraries that I've released as open source (just be aware that documentation is lacking as of right now).

I gave it some more thought and decided to go with it, knowing that XNA is commonly used to make PC / Xbox 360 / WP7 games, but not that many apps. It turned out to be a pretty good fit, except for keyboard text input & resizable windows, problems I have now managed to overcome by taping into some native stuff to override XNA behaviors.

Porting to Linux and Mac

XNA on the desktop PC is Windows-only, since it's built on .NET and DirectX. Happily, there are multiple initiatives to rewrite XNA on Mono and OpenGL.

Both MonoGame and ExEn are pretty far advanced for 2D games on various platforms but 3D still has some ways to go.

In the mean time, I managed to run the launcher of CraftStudio using Wine and Mono dev versions under Linux, but it crashes when trying to update. There's a bug report on Wine about this particular issue and I think it should be fixed pretty soon. Hopefully some level of support through Wine for Linux & Mac isn't very far off.

(I'll give some info about how networking is handled in the next post)

I'm readying up for pushing a new update this week-end, adding support for so-called asset revisions.

Assets are models, maps, scenes, documents or scripts... All this stuff you create, you should never loose it! Asset revisions allow to check point them so that you can later restore an old revision.

I expect most people to use CraftStudio projects with a white-list of users who can join, but for those who will make public game / movie projects, having the ability to create revisions will be very instrumental in reverting any kind of griefing.

The update will also add support for creating documents. It's pretty much like a real-time wiki. I think this will be particularly useful for people who want to make games with people they don't know in real-life. I don't believe in big fat game design documents but being able to lay down a few notes here and there should be a great addition.

And now for some info about CraftStudio's architecture!

CraftStudio uses the Lidgren network library for all its network needs. Basically it's a very complete, portable library, built over UDP. It handles everything you could dream of (message channels, discovery, encryption, reliability, ...) and is pretty simple to use. Highly recommended.

The Installer - basically installs the Launcher and ensures you have all the dependencies. It's built with WiX XNA (some more info).

The Launcher - a small program to input your credentials and fetch the latest client from the Master Server. On Windows, the client files are stored in $USER/AppData/Roaming/CraftStudio. This allows to sidestep any permission issues which might arise from using Program Files. Both Google Chrome and Minecraft act similarly.

The Client - well, this is the main thing! It talks to everyone and displays pretty things.

The Server - which you can run on your own computer to start one or more projects. It handles all the commands from the client and keeps everyone in sync.

Once the launcher has checked for a new version, it starts the client and closes itself.

The client reopens a connection to the master server, authenticate itself and fetches the news. Later on, I plan on making it fetch account info like points (probably for a global achievement system or something), type (paid account or not), games one has added / bought, and maybe even your projects list (right now it's only stored locally).

A server can serve multiple projects. Projects all have a UUID and are stored as directories under Projects in the server's directory.

When the client connects to a server, it announces which protocol version it supports (a simple integer which is incremented everytime I make a breaking change in the protocol), and the server returns an error if they don't match. Protocol versions are separate from client / server versions so that I can release new versions of the client which don't require a new server (and vice-versa).

Once scripting is in place, people will be able to make pretty much any kind of game. A friend and I have a project to make a 4-players Zelda-like at some point for instance (here are some artworks my friend made. Of course the actual game will look much more retro)

I just released a new pre-alpha build (0.0.8.0), last one was 2-3 weeks ago. This update features collaborative document editing and an asset revision system (to do backup & restore old versions). I'll write in more details about all the work that went into this tomorrow, I need some sleep right now.

If you have already grabbed CraftStudio, just start it up and it will automatically update. (Alternatively, download CraftStudio here!)

So for the past week I've been working on collaborative document editing and it's now available.

Making changes to a document at the same time as other people sounds like a nice thing to do, but what happens under the hood is actually pretty complicated. Let me explain!

As you may know, network communications are far from instant, the data takes time to reach the server and come back to the client. (This delay is called the round-trip time or "ping").

The client makes changes to the document as you type, and sends them to the server, which will dispatch them to everyone currently watching to the document. The change will be a simple packet containing its location in the document, and what kind of change happened (inserting a character, removing one, etc.)

But what happens if two people make changes at the same time?

Well the server will receive one of them first, will apply it, and notify everyone. Then it will receive the second one (which was crafted and sent before the first one was applied!) and will try to apply it.

But hold on, the change is not valid anymore! It is based on the previous document state. As such, it must be "rebased" on the new document state. This is called "operational transform" and guess what, it's a whole field of research! Let's here a tale of two people editing a document:

Player A and Player B are writing a story together. Their (very short) story currently goes as following:

Bob was walking down the street

(Let's call this document state "state 123".)

Player A wants to change "Bob" to "Jim". She starts by erasing the last letter of Bob:

Bo was walking down the street

This generates a change which can be described as such (indices start at 0):

Remove character at index 2

At the exact same time, Player B wants to start a new sentence. She starts by adding a full stop at the end of the document:

Bob was walking down the street.

Her change is encoded as:

Insert character "." at index 31

Both players send their changes to the server, so that it updates the document.

Meanwhile, the server is happily sitting when suddenly it receives a message from Player A! The message says:

Based on document state 123, remove character at index 2

Without even a hint of hesitation, the server complies and updates its copy of the document, calling it "state 124" and broadcasts the change to everyone. Having done a good job, the server wants to sit back and have a cookie, but another message comes, this time from Player B. Reluctantly, the server opens it. It reads:

Based on document state 123, insert character "." at index 31

"This is old news!", comments the server, "State 123 is so yesterday!"

(At this point, I should probably point out that the server didn't sleep well and is in kind of in a bad mood.)

The server looks at the changes between state 123 and state 124, and realize that he has to adjust the newer change. Its magic rule book says the following:

When an insertion happens after a deletion located before it, the insertion should move back by one character

"So, let's see", mumbles the server as it looks at the changes.

Insert character "." at index 31 30

"Yeah, that should do it!". And just like that, document state 125 is created! The server broadcasts the new change and everyone is happy, ever after.

That should give a basic idea of what's involved with Operational Transform and real-time concurrent editing. There's a lot more to it, of course, and if you're interested, you should check out the OT faq which is a good reference on the subject.

Now that I'm done with documents, the next major CraftStudio update will add scenes & scripting! Exciting stuff... stay tuned!

Wanted to take a look but the web site fails to display the descriptions for the fields I'm supposed to enter. It's easy for login, but for creating an account there are four fields. You might want to look into that.Using XP with IE 8. Do NOT tell me to use a different browser.

Wanted to take a look but the web site fails to display the descriptions for the fields I'm supposed to enter. It's easy for login, but for creating an account there are four fields. You might want to look into that.Using XP with IE 8. Do NOT tell me to use a different browser.

Sorry about that, I didn't spend much time on the website yet and haven't tested it under IE. You can imagine I've had enough to do with the tool itself

You're welcome to use any browsers you want but currently I can only say for sure that it works under Chrome & Firefox (probably Opera too). The text is displayed as an <input placeholder> and I guess IE8 doesn't support it. Basically the first field is login, then password (twice) and e-mail.

CraftStudio had 140 registered users by Friday night before the post happened, it had doubled a few hours later and as of right now, it's up to 832 people registered!

I didn't sleep much Friday night, trying to welcome and handle all the newcomers on the server. Luckily, a few people helped out. A big thank you to everyone who gave their time so I could fix issues.

This is both amazing and a bit overwhelming. I'm glad I spent time testing and fixing a lot of bugs a few days before this, it could have been a disaster if it had happened at the wrong time. There has been a bunch of crashes & other issues but overall it went pretty well.

I really hope I don't get too much publicity before I can implement scripting because some people come with very high hopes and well, it's just not there yet. (Anyone with more than 10000 of followers or viewers, if you were to consider talking about CraftStudio, please hold on a few weeks before pointing your people at my poor little server. I AM SO NOT READY. Thank you )

I have yet to manage to get the server to stay up a full night without having to restart it in the morning, but it's been much more stable lately. Basically when I woke up today, the server was sending invalid messages to clients, making them crash. I'm working on ensuring the client handles this more gracefully and obviously having the server not send invalid messages.

I added a welcome message on the server so people have some help even when I'm not around, but most people will just click around when they get on the server rather than read 3 lines of text. It's a good thing I implemented the revision system otherwise the (sometimes unintentional) griefing would have been very hard to cope with.

If I understand things correctly, this can not be used without an active internet connection?

Yes, it can. The launcher checks for updates with the master server and won't start if it can't reach it but you can bypass it (after the first client download) by starting the client directly from [User folder]\AppData\Roaming\CraftStudio\ClientApp\CraftStudio.exe. I should add a way to bypass updates in the launcher, but haven't had time yet.

You can then start a local server (instructions here) and use it without any Internet connection.

Impressed with how stable this is so far. I'll be keeping tabs on this

Thanks. I've been fixing bugs all week-end thanks to the many many signups from IndieGames.com, so the stability is pretty good now indeed.

Oh and I just stumbled upon http://www.bfxr.net/. I would love to build something like that in CraftStudio. Although sfxr a great tool, it kinda make all games sound the same. Bxfr looks like a great improvement. I'll check it out in more details when I get to sound stuff. Thanks for making it