>> Jeremy Foster: All right, so go ahead and give a round of applause to Arun. Thank you, Arun. [applause] >> Arun Babu Nagarajan: Thank you. Hello everyone and welcome to the session. I'm Arun and I'm a dev in the Windows team. Specifically I work for the printing and imaging technologies, and today we'll be discussing about developing a casual game for Windows 8. And this is for beginners like you and me, and hopefully experts in here will find something interesting about today. So sometime last year I got interested in developing casual games during the RTM phase of Windows 8, and I started exploring the options on what other tools which are available for writing games for Windows. And this is what I found. So if you venturing into game development for the first time, be prepared to be overwhelmed with the number of choices you will be facing. So I spent some time looking over the choices and figuring out what exactly is my skill level and which is going to fit my timeframe. So I want to have a quick ramp for learning it so that I can start working on the game as fast as I can. So I'll give you a quite summary of what I found doing my investigations. So as you know Windows 8 supports C plus plus, C sharp and HTML 5 Java Script. So if you want to do something like a fairly highly professional game like Halo which has some 3D effects and you should be able to control the camera position and angle and lighting and shading and all that then you should be doing DirectX or use engines like Unreal. If you comfortable with C sharp then there is a very popular framework called Unity which is the most popular cross-platform development framework out there. And if you are okay with casual games where you want the user to just play for a few minutes or a few hours, like Angry Birds -- Yeah? >>: I was going to ask like can you mention for each of these how much it costs or if it's free? If you know. >> Arun Babu Nagarajan: Sure. I think Unreal and Unity are paid, and I don't know the exact cost structures but I think we should be able to look it up fairly quickly. But I'm currently going to focus on this particular tool called Construct 2. So HTML 5 Java Script is fairly new to the game development space, but the game developers are quickly erupting it with respect to the fact that it's pretty much [inaudible]. So theoretically speaking you can write an HTML 5 Java Script game with just Notepad and access to a browser, but you don't really want to do that because there are some rich tools available; although, there are some popular games which are built from scratch. For example, if you have heard about Cut the Rope and cuttherope.ie is the website, so they have completely redone the game for Java Script and HTML 5. And there's this other game called [inaudible]. I don't know if you've heard about it but it's also a very cool game. It's [inaudible].ie is the website and you should be able to take a look at the games. So those two games are written from scratch using the HTML 5 Java Script's canvas element. And there are some mid-level tools like Create JS and Impact JS. I think those are free. They give you a set of helper libraries which help you start your coding pretty fast. But still you need to have a pretty good understanding of how to do Java Script programs. The one we are going to talk about today is called Construct 2 which is a very easy way to write a game or even mark up a game if you want to do a professional game or 3D game. And this one does not require you to have an understanding of Java Script. You don't need to know Java Script at all. So that's what we are going to focus on today. So I've structured this talk into two major areas. The first half we will take a look at the introduction to the Construct 2 tool itself and give you a taste of how easy it is to develop a game, a prototype game. And the second part I will focus a particular plugin which I authored for Construct 2 which helps to bring all the rich Windows 8 features to Construct 2. So that's all with my slides, and let's start off with developing a game. I'm going to try developing the game from scratch and let's see how far I can proceed. All right, so let me launch --. I bought the software; I don't know why I get that. Okay, so let's launch Construct 2. This is not a free edition; I have a license. Okay. And let's do the most natural thing that we do which is file, new project. Okay. So as you can see Construct 2 comes with a bunch of built-in templates ranging from -- I don't know. You can type whatever you want. Let's say jump. I will find a jumping game template. Let's say I want a card game. Sure. Anything else? >>: Bird. >> Arun Babu Nagarajan: What? >>: Bird. >> Arun Babu Nagarajan: Bird. I don't know. >>: Angry Bird. >> Arun Babu Nagarajan: So bird is, I don't know, a scrolling game, right. So you can type scroll and you should be able to get the scrolling game area. Anyway, that's not fun. And let's do a simple blank project so that we can understand the basics. So I'm going to create a blank project, and this is a fairly simple ID. Let me just close this. And what you have here is there is a project view over here. And you have all the items which are listed here which is currently part of your project. And when you select an item over here, your properties window would show the corresponding properties for the items that are there. This is fairly basic. So the one interesting thing over here is the layout. Let's talk about that. So layout: you can think of a layout as [inaudible] preconfigured set of objects which are going to appear on the screen. A layout can be one layout per level or one layout per, you know, the title screen for you app or one layout for your menu, etcetera. So let me make this layout as level one. So we are going to start designing the level one for my game. Right? So we are going to do a platform style game, for example a Mariostyle jumping game where the main character jumps around on platforms and collects stuff and jumps on enemies. So I'm going to change the layout size to something big. I'll just zoom out to show you that this is the whole layout size here. And as we said, this is a horizontal scrolling platform so you will have more space for the player to jump. And the thing you should note here is that there is this little dotted line over here which represents the window which is currently visible to the user. Right? So for a Mario-style game you have a long strip of layout and your window would be one part of it. So that's what we are trying to design here. All right. Okay, so now that we have the layout set up let's add some background to this layout. So the way you do it is you can either write, like, insert new object or you can go to object types, insert new object or you can double click. So I'm going to do double click for now. Right? So we want to add a background to this layout. So there is this object called tile background; I'm going to select that, and I'm going to just place it over here, anywhere. This opens up an image editor, and I'm going to open up an image which I already have prepared for. So here is a background for our game, and the background shows up here. Cool? I'll close this. And you can see that this object is resizable, so I'm going resize it to fit the whole screen. So from the name you can understand that this is a tile background which is a very common technique used in games where you take one small image and then kind of tile it over there. And if you smart enough to design the tile then it would look as if it's a whole new image. Right? So in this case I'm going to position it at the top left. And I know the layout size so I'm going to fill it in. However you can do it, you know, with the mouse. Okay so we have the background set up nicely. Okay. So we are going to add more and more objects to this layout like the player and enemy and the land on which he will jump and that. So by mistake I will drag this and then it will spoil my careful positioning. So what I'm going to do is I'll create layers, so let's introduce the concept of layers to you. So every layout can have layers. If you have worked with photo shop or [inaudible] then you would know layers, but for the benefit of those who are not introduced to it let me try to explain that. So you can think of layers as transparent sheets laid out on top of them. And the bottommost transparent sheet, think of it as having the background. And the next transparent sheet you can add the player, and the next one you can add enemies and all that. So in this case our bottommost layer is going to be the background. I'm going to rename it to "Background" and I'm going to lock it in place. So this means that I cannot select this background any more, and it's locked in position which is nice. And I'm going to add another layer and name it as "Main" into which I'll drop all my main players and enemies and everyone else. So let's have that main layer selected, and let's add the central character to this game. So I'm going to just double click and add a sprite. If you are not familiar with sprite, sprite simply means an animated object in the gaming world. So I'm just adding a sprite. And notice how the crosshairs has a tool tip which says, "Main," which means that we are going to drop whatever object we are trying to add into the main layer. And again we get the similar image editor view here, but this is a little bit different this time because we chose the sprite. So let's import the sprite. I'm just tri-clicking here and import sprite. And I'm going to import the player, sprite. Let's start off with the idle animation. So Construct 2 gave me 11 frames for this particular idle animation, and this is one is just empty. I'm going to delete it. And as you can see there is some empty area around this player which might take some space, so I'm going to just remove it by cropping it. Shift-crop will remove it from all the frames. I'm just going to do that. All right. So now we have the player over here. And there is this concept of hotspots which means what is the place of contact for this particular object. So this is a platform game and this player will be jumping on solids, right? So the hotspot is going to be the bottom. I'm going to do a bottom here and then make it available to the whole animation. And that's pretty much it. So I'm just going to set the animation to loop and preview it. So he's nicely idling there. So I'm going to change his name to "Idle Animation" and set the speed to a little bit faster. Cool? So I'll just drag him here and let's just run the game. So you have created the game which runs on ie and your player is idling there. Right? He is waiting for your commands. All right, so now let's add some platform for him to jump on. I'll add more sprites here and, again, on the main layer I'll do the same thing. Import sprites [inaudible], and I'll get some more tiles. I just happen to know that this sprite sheet is made up of 144 frames, so I'll just say it over here and let Construct 2 take care of splitting it up. So it's actually doing some work splitting up the huge sprite sheet into 144 images. And we got it now. So the first one is empty; I'm just going to delete it. >>: So you have one big image that you're telling the thing that this is actually... >> Arun Babu Nagarajan: Yeah, that's a standard way in the gaming world where they have a concept called sprite sheet where they layout everything. And you can spread them out whatever way you want. So that's how they distribute the assets. So if you go to professional websites, they will sell sprite sheets for theme. For example like an aircraft-based theme, they will sell a sprite sheet where you have, you know, all kinds of aircrafts and everything so you can split it up. Okay so this one I'm going to use it as just a place holder so I don't want it to animate at all. So I'm going to set the speed to zero and then zoom in a bit and then show you what I'm trying to achieve here. Okay, so I'm trying to create floating land on which the player is able to jump on. So I happen to know the frame numbers one and a few other frames are interesting to me. I'm going to control-drag to create a copy of this. And control-drag. And I'm going to make one-four is another frame I want. And fourteen is another frame -- Not fourteen, thirteen I think. Yeah. So I'm going do some snap to grid and then try to align these guys so that it actually looks like land. All right, so [inaudible] this there is a floating piece of land. So now is the most interesting part for this demo. I'm going to do some trick and add a placeholder here just like the usual way, what we have been doing, and set the origin to bottom. I'll explain what this is all about. So I have created a -- Let me turn off the snap to grid. So I have created a little square which is going to be the bounding box for this player. So let me make the opacity 50 so that I can see through it, and I'm going to create it as a bounding box for this player. Right? Okay. So I don't want the, you know, props which he has and other things getting in the way. So at this point we have everything set up for the player to jump on the solid. This is where Construct 2 comes in and saves us a lot of time. So if you look at the properties there is something called behaviors which comes built in with Construct 2 for all the projects which help you assign a kind of behavior to each object. So I'm going assign a platform-style behavior to this object, and let's see what that means. So I have selected this box which I will call "Player Box" and I'll this as "Player." So I have added this platform behavior to this player box, right, and I'm going to declare this as a solid behavior, make it as a solid. All right. So that's what I did. I haven't written any code. So let's see what happens. So I'm using my keyboard to jump. If you look at the bounding box, it's jumping around. So we did not write any code and we already got the platform behavior for free. Right? So all we need to do is bind this player to the bounding box and hide the bounding box. So I'm going to hide the box by saying initial visibility to invisible, and I'm going to go to the event sheet. Okay, so this is another little new concept. So event sheet is the way you program with Construct 2, and whatever you have in here would be executed 60 times a second and it would be rendered on your screen. Right? So what I'm going to do is I'm going to ask for a retake, position the player to the player box. Okay, so a retake: we are asking the system to position the player to the player box. So now we have hidden the player box and now let's see what happens. So that's it. So your player is jumping now. So there is some more scope of influence here, for example if you want, you know, mirroring the player. If you click on the left key, you want the player to face the correct direction, right? So let's do that by adding a keyboard object. It's going to take five seconds to have it available. That's it. And I'm going to add on key pressed. When the right key is pressed what do I want? I want the player to mirror, not mirror. And when the left key is going to be pressed I'll say I want the player to be mirror. Okay. So let's run. So he's mirrored. Right? Okay, so we have a basic set up over here. And as you can see I can add more animations to this particular player. So in the interest of time I'm just jumping on to one of the checkpoints I have where I have added, you know, the jump animations and jump to run animations and all that to this particular player to help me with getting on to the next part. Okay. So I'll show you animations, what we did. So last time we saw here there was only one animation, and now we have added a bunch of animations. So that's it. And we need to have some logic tied in as well. So all it does is if the platform is moving then set the animation to idle to run and when the animation idle to run is done, go for run. This is just a simple [inaudible] which you can figure out. And if you run this, you will have those nice -- you know, the run animations and jump animations and all that. Okay. Another interesting thing which we should do for the player -- I already added it. So there is behavior called Scroll To behavior which means that the screen will follow the player. Let's remove it and see the difference. So without Scroll To behavior if the player jumps off he is not shown in the screen, right? So let's add a Scroll To behavior and now let's see what happens. So let him jump off the cliff. So it follows him. Right? Okay. So now that we have the player let's add some enemies over here, so I'm going to make a copy of the floating land by control drag. One more and one more. Okay. And I would like to add an enemy to it. But before that let me add just the window size; 640 x 480 sounds 1995. Now we can see that the dotted lines are, you know, expanded so that you have a bigger window. So I'm going to add a sprite for the enemy, and I have a few enemies. Oh, that's not what I wanted to do. I wanted to import sprite sheet. I'll delete this. And I do the shift crop to remove extra space around it, and I'll set the origin to bottom and apply to whole animation. And I'm going to set the loop to yes. And snail is a snail so it can be slow. Okay? And snail is also like the player actually, right? He's also a platform-style object, and he wants to move around the platform and jump off the platform and all that. So let's give him the platform behavior as well. And if we run this, we'll note something funny. So the control is applied is applied for both the platform objects, so we don't want that. So we will remove this guy as being controlled. Nope, I don't want to control you. And now they're independent so you can jump. That's nice. Okay, now we have added the snail and the player is ready. And the next thing, obviously, is to make a way for letting the player kill the snail and the enemy kill the player. So how do we do that? Let's do the player on collision with another object; the other object being -- Oh, I should rename it. Let's do it again. Player on collision with another object, the other object being enemy. Okay. So this is going to execute whenever the system detects a collision with the snail enemy. So we want to do a couple of things here. One is if the player jumps on th snail, obviously the player wins. And if he is coming into contact with the snail on the sides, the snail wins. Right? So let's do the first case, and I'm going to add a sub-event. And here I'm going to say is falling. So if he is falling and he is colliding with the snail enemy then we know that the snail should be killed. That's it. And the next case means - Ah. The next case means the snail wins, right? In that case we would want to destroy the player. Let's not destroy the player but we'll, you know, flash the player saying that, "Okay, he's under trouble." So for that we have a behavior called flash which we will add. Okay, we have the flash available and we can make the player flash. So it's going to flash for one second, so let's try that. So the snail is killed and when we come into contact -- Oh. [laughter] And when you come into contact with -- Oh. [laughter] Okay. Oh, no. Okay, fine. So you're supposed to be a little bit out. [laughter] It's fun, right? You can delete your game. Yeah, now he's flashing so that's what we want, [inaudible]. And you can some little bit, you know, realism here by, you know, having the platform jump a bit when you jump on the snail. That you can achieve by setting some offset several hundred pixels. So this will give you that nice jump effect. You see that jump effect? So that's what we got. Okay. So what else do we need to do? Okay, now the obvious thing next to do is to add some scoring capabilities to your game. So let's add some scores to the game. Now is a good point to talk about parallax. I don't know if you guys know this: so if you go to start screen and you scroll around, the background -- You know, the stars in the back? -- they scroll a bit slower than the foreground which gives you a nice depth effect. And this is the same technique used in all the popular games like Angry Birds and all that. When the bird flies, the background scrolls smoothly which gives you that nice depth effect. The more layers you add, the more depth you will get. So let's add some depth to our game by setting the background to move a little bit slower than the foreground. You have a parallax and you can say move 50 percent slower than the foreground. And we were talking about scores, so I'm going to add a layer for scores and call it heads-up display. And it's always going to be on the top. And obviously you want to always see the score, right? I mean, your score should be always in the fixed position either top left or somewhere so we'll make the parallax zero which means it's going to be fixed. Right? So I'm going to add a text box and notice how we are placing it on the HUD layer. And I'm going to call it score, start off with zero, and we'll make something like light color and we'll make it big and visible, highlight and an impact font. And I'll make it something big. Okay? So now you can see that we are going to have score up here at the top left, and it won't scroll away. It will just stay there. Because we have set the parallax to zero, it will just stay there which is good. So how do we keep track of the score? Obviously we declare a variable. And initial value is obviously zero. And you can see that applies over here saying that the global number is a score of zero. And I'm sure you can guess the next step, so I'm going to add ten to the score. That's it. So whenever you kill a snail you get ten points. And one more thing we have to do is update the text. I'm going to say score, colon, concatenation with score. So if did all this then we should get ten points when I jump on the snail. Okay. So we got ten points. Cool. So that's pretty much what I wanted to show to give you a taste on how to, you know, developing games with Construct 2. And let's move on to the next section where we wanted to talk about the plugin enables bringing in some of the rich Windows 8 features into Construct 2. So for that I will -- I think this is going to crash. Don't say it. Okay. So I'm going to have a final -- not final but better version here to show some more things which could be done here. So I'm going to play it a bit to show you. You can see that I have made the snail move around a bit. There are some points to be collected with this fruit things which are rotating and some coins to be collected. And your level is complete. So that's what we have as the game right now. And let's try to export this to Windows 8. So you can go to file and export project, and it'll give you a bunch of options. Notice how Windows Phone 8 is also present there. So you can export to Windows 8 and that's it. What Construct 2 is now doing is it's creating a Visual Studio 2012 HTML 5 Java Script project and backing up all of your resources which you are using in this game and creating a project file for you. So once it's ready we should be able to hit a file and it should just work. So I'm going to open the destination folder and locate my project, open it in Visual Studio. And I just need to do one thing to choose this test certificate. Okay, and it's ready to run. So you have your Windows 8 game which is, you know, pretty much ready to submit to your store. So it's just exactly the one which we played in IE, and it's just there. So at this point I realize that the Construct 2 gaming environment is missing out on super cool features which we introduced in Windows 8, for example like the settings charm, integration with settings charm, roaming settings, sensor support and, you know, the snap view, all these things. So if you think about the target audience, they are so used to programming in Construct 2 with drag and drop and the way I showed you for the last 30 minutes which is a very simplified form of game development. So I thought that if we fill in the gap by bringing in the rich features from Windows 8 made available to Construct 2 IDE then more people would start using the Windows 8 features. So I went ahead and wrote a plugin called Metro, which I don't know why I named it that way; it was cool at the time. And let's see how it helps us. All right, so I showed you that you can export the game, and it's already available. I'm going to show the value adds which this particular plugin provides when you use the plugin. So it's just like any other object for this project, Construct 2 project. So I'm going to right-click on insert new object, and this is the plugin which I wrote which I talked about. And I'm going to insert it. And just like any other object it will be available soon-ish and we have the [inaudible] available. Right? So you can see that I have a bunch of features over here which we will talk about in a while. And if we export this now, let's see what features we get for free. So now Construct 2 is composing a project but it's also adding some features which I wrote as a part of the Metro plugin and compiling everything into Java Script. So in fact we should be able to open up the generator Java Script and look at whatever code there is. It's all readable. So we go back here and show reload, and I'll do this again. And now let's run this. So at the first look it doesn't look any different, obviously. I'm not going to add special graphics for you just because you added the plugin. So the first thing you would notice is that if you go to the settings charm I have added the preferences, help and about by default. All right? So you get this for free. So you ge the audio and sound effects switches and everything added for you for free. And you can have your help page in your settings charm for free, and you can have your about page in your settings charm for free. This is all just adding the plugin. And once you export it, you get all this for free. It saves a lot of time for you, right? You don't want to redo the whole thing and, "Oh, I want to do an about page then how do I --" you have to start learning Java Script. And, "How do I integrate it with Construct 2?" It's all done for you. You just export it with it and you got it. And we know that Windows 8 supports snap view. And most of the games are designed for screen playing, so this is my default screen where I can say, "Press full screen to continue playing." And of course the markers here, you can replace it with whatever you want. Right? So once I click this, you'll be taken back to the full screen. So these are some little conveniences which you get for free if you do that plugin, and your app would feel more natural with Windows 8 paradigms. So that's what you get for free. So what else can you do with some more effort? One of my most favorite features in Windows Store Apps is the roaming storage, roaming settings. I don't know how many of you are familiar with it? So it's the concept where if you have your app installed in a computer with a Microsoft account connected and you store something on that PC, Windows will take care of roaming those settings to every other PC for that user. Which means, for example, in a game environment it's very easy to store the high scores in one PC. For example you are playing on Surface and you want to store the high score in Surface, and when I launch it in the laptop or some other PC then it should show the high score, right, because they all roam magically and you don't have to do anything special. So when I wrote this plugin I started realizing that in order to demonstrate all of the features that this plugin supports I needed to have a sample app so that people can look at what's possible and to [inaudible] that this is actually a, you know, working plugin and you can actually use it for a production environment. So I kind of wrote this breakout clone. This is an app in the store which I kind of call a sample for my plugin. And I installed this app in this machine for the first time. I haven't played on this. And if I go to these levels, you can see that all my high scores and stars and the level unlocks are all populated here. So if I had played it, it would be, you know, the lock buttons all the way. But because I am using the roaming settings, I get all this for free. I'm just storing it locally and it just roams, and it's available on all my PCs. So I'll get back to this app a bit later when we talk about particular features. So I'll show you how to do the roaming settings here. So this is very similar to the one which we did earlier; it just has some more bells and whistles. I have created some groups for nicely organizing the events. So let's say you want to store these scores in the roaming storage, how do you do that? It's as simple as search for roaming, set roaming value, and you can specify the key as high score, and you can save the score as the high score. Right? So what this does is behind the scenes when you generate a Windows 8 project, this will put in the necessary WinJS API which calls into the roaming API of Windows 8 and then stores your score into the store which means that this will be available in all your PCs. And let's say for example you have stored it here and you are launching it on a fresh PC, right, so you want to retrieve whatever you stored. So how do you retrieve that? What you can do is you can say -- So during this start of the game, what you can do is -- Let's say I want to populate the score from previous session which you played on Surface, what I can do is I can do systems, set value, Metro dot, roaming value, high score. So this would retrieve the value you stored somewhere else and make it available to the other instance. So that's very convenient. This is how I wrote this particular app so that whenever you play -- I doesn't matter if I, for example, get a couple stars in this and if I go back home, my level will be unlocked and my high score will be available. So that's how you do the roaming storage. And the next thing I wanted to talk about was -- So as a part of the app you also get, for example, resetting the data you store. So let's see: go to preferences. And so this one we'll clear off all the settings you have stayed in roaming storage or local storage. So you can click reset and then, do you really want to clear the storage? So this will clear off all the unlocked levels and your high scores and all that. So you get all this for free with this particular plugin. And of course Live Tiles. So you want to add support for Live Tiles from your game. For example, whenever you detect that the player has crossed a high score or unlocked a level you want to publish a shout out saying that, "Hey, you have cleared a new level! Congratulations!" or whatever. Right? So how do you do that? You can do Metro, update Live Tile. So that's it. So once you do that we'll take care of the magic how to create the XML 4 publishing layers and make it available for the wide tile and all that. So this is how you get this particular message from my app. So that's how I publish this particular message. And another important thing with Windows 8 which Construct 2 doesn't have a way to tap in is the [inaudible] model. So we have the concept of trial app, we have the concept of in-app purchases, we have the concept of advertisements, right? So you can do something Metro is in trial mode and you can expose certain levels and not expose certain levels. You can have mode kind of enemies, you can have super powers. You can have the shooting special bullets and all that based on whether you are in a trial mode or not. And you can also have in-app purchases, so you can check whether the user has purchased something special. So you can check the in-app purchases, no ad. You have to configure this in a special way. I have all the details in my blog. But this is how it works: you can check whether the current running system has purchased or made a purchase for this in-app then you don't show the ad. So that's what I did for this app. So if you go to charms, settings, purchase. So it's actually contacting the Windows Store and then retrieving the, you know, "If you wanted to remove the advertisements, please go ahead and upgrade it" for whatever dollars there. And if you click upgrade, this will actually go ahead and invoke the purchase dialogue and complete your purchase. And once you go ahead and buy it, when you come back you can check again and then you will know that, "Oh, this guy has purchased no-ad experience" and you can remove the ad. So that's one way to structure your game. And I have written this blog about these trials and in-app purchases in quite decent detail, and if you want you can take a look at that. And I also wrote a -- Yeah, this one. So this one is a summary on -- Somebody was asking a question today on what is the good way to monetize your game. Like, do you want a free app? Do you want a fullyfeatured paid app? Time-limited trial app or a feature-limited trail app? Or in-app purchases or whatever? Or in-app advertisements? And everything else. So this is kind of a summary on what are the various options available for you and how you can go about doing that. So apart from that, I am from the team which exposed the sensors API in Windows 8. My managers wrote, you know, the [inaudible] API. So I also exposed those sensors API. Not this. Yeah. So you can see here that you can, say, use the accelerometer, [inaudible], gyrometer and inclinometer and lights sensors and everything. And you can read whatever values are provided by the sensors and make it, you know, like all the cool games which use sensors to position the gamer and all that. So that's also available as a part of this plugin. So apart from that, if you have played around with trial apps and purchasing in-app experiences then you would know that you need to stage before submitting to the store. So when you deliver the app, you cannot rely on -- Because your app is already not in the store, when you issue a request it would fail. So you cannot complete the testing for your app. So that's why they have an elaborate scheme for making the app testable with the local setup. So I have taken care of that as well. And when you, say, purchase test mode, we'll take care of doing the magic, saying that "Oh, okay." So this is testing mode and we will do the fake messages saying that "Okay, your app purchase is completed successfully or failed," and all that. And whenever you really want to submit to the store, you can turn this to false and then you're all set. So that's it from my side for today. So this is my blog and I kind of spent, I don't know, a few weeks over there. And I released ten releases of this plugin every two weeks or something and tried to cover all the various Windows 8 features available out there. So that's pretty much from my side today. And hopefully you would feel... [applause] Yep, that's what I thought and hopefully you feel the same. Okay. Questions? >>: Yeah, how did you handle suspend and resume? >> Arun Babu Nagarajan: How do you handle suspend and resume? So I have the plugin as a model for pause. So you can detect the call back for suspend and it will pause your game. >>: Does Construct 2 handle [inaudible]? >> Arun Babu Nagarajan: Yeah, by default they just freeze the game. So for example in the game which I wrote, right? So let's say I'm here. And if I switch away, the game is already frozen. So whenever I switch away from the game -- Let's say I'm playing the game, and whenever I switch away from the game like pressing the start button and when I go back to the game, it's already in the paused state because I handled that by saying that, "Hey, we received a suspend event, just pause." Yeah. Yeah? >>: How is the performance of the framework? >> Arun Babu Nagarajan: How is the performance of the framework? Good question. So I have tested with Surface, and for a simple game it is just fine. But when you add a lot of sprites, unless you are doing some optimizations, it can become a little bit sluggish. >>: What's a lot? >> Arun Babu Nagarajan: What's a lot? >>: [inaudible]... >>: 20, 30, 40? >>: [inaudible]. >>: [inaudible] you said a lot of sprites. >> Arun Babu Nagarajan: Sprites, yeah. So this game was having some issues on Surface, whatever I'm showing here because -- No this one had a lot of sprites because I developed out all the -- This is my first game so I was not optimizing it properly so there may be too many sprites involved here. >>: What was the optimization like [inaudible] across sprites or what? >> Arun Babu Nagarajan: Yeah, so like we talked about sprite sheet, I did use sprite sheets. I used single image for every [inaudible]. So that concept I was not aware of when I was starting out this. So that might help a bit. >>: [inaudible] choosing a specific size? >> Arun Babu Nagarajan: Yeah. Good question. I should have shown that. So you remember we changed the layout size to -- not this -- the window size to 1366 x 768? So if you make it 1366 x 768 and set this property full screen in browser to any other letterbox scale or letterbox integer scale, Construct 2 takes care of magnifying it to that particular resolution or particular 16:9 resolution. So even if you have, you know, like a bigger resolution then your game would be nicely fitting in. >>: So you're saying like if that is 16:9 then you just ask it to [inaudible]...? >> Arun Babu Nagarajan: Exactly. That's why I always say just design for 1366 x 768 and you should get everything else for free. And you will get the black box for every other viewer resolution. Yeah? >>: Is this is a part of like the touch thing like pinch to zoom and swipe and all that kind of thing? >> Arun Babu Nagarajan: I haven't tried pinch to zoom but you get touch for free just like anything else. So I actually have a touch screen, and I can touch this and everything works fine. So I haven't played around with the pinch to zoom and all that. >>: What about multi-touch? >> Arun Babu Nagarajan: Multi-touch I have not played. But in fact... >>: There's a plugin for multi-touch. >> Arun Babu Nagarajan: Oh yeah? Okay. Yeah? >>: So Construct 2 supports other platforms as well, right? >> Arun Babu Nagarajan: Yeah. >>: So you tried submitting it there and the performance, and how did that experience go? >> Arun Babu Nagarajan: So I haven't submitted to any other platform yet. So I don't know the answer to that question. But from looking at their forums and support aliases, it's a hugely active community and they are very responsive. So they release an update every two weeks and they're very responsive. Yeah. Yeah? >>: Where'd you get your art work? >> Arun Babu Nagarajan: Can you repeat that? >>: Where did you get your art work? >> Arun Babu Nagarajan: I did it myself. >>: Did you? Now did you have to get audio files also? >> Arun Babu Nagarajan: Yes. Actually I have audio files but it's not connected. Yeah. >>: But you don't know -- Do you know if there's like for -- What is it? -- Elance, you know if they do audio files, people do audio files or are there other ways of getting audio files? >> Arun Babu Nagarajan: So for the audio which I used for this project when I purchased the Construct 2 license it came with a bunch of music files. So I chose background music and, you know, the ball-hitting-bat music and all that from their collection. That what was enough for me. But there are a lot of creative commons libraries out there where you can get free music or you can purchase. >>: Sound effects [inaudible]...? >> Arun Babu Nagarajan: Yeah, sound effects. >>: Construct 2, also I think on the website you can buy sets. >> Arun Babu Nagarajan: Yeah, they also sell packs. >>: On which website? >>: On the same website, the Construct 2 website. >>: Oh, okay. I like your artwork. >> Arun Babu Nagarajan: Thank you. >>: Custom fonts, do they allow you to import fonts? >> Arun Babu Nagarajan: Sorry, I'm not getting you. >>: Fonts. >> Arun Babu Nagarajan: Custom fonts. >>: Yeah. >> Arun Babu Nagarajan: Custom fonts. So you can choose whatever fonts are installed on that particular machine, that's it. As far as I know.... >>: [inaudible] in with your game, though. Right? >> Arun Babu Nagarajan: I am not familiar how to do that. I haven't figured that out. So I just stick to Impact because it looked decent enough. Yeah, but I see where you are going with that but I don't know how to do that. Yeah? >>: You can add any custom CSS properties that you want and so then you could go ahead and package your font like you do with a web platform. >> Arun Babu Nagarajan: Yeah? >>: When you were setting up your events and sub-events, etcetera? >> Arun Babu Nagarajan: Yeah? >>: When you had multiple actions per event and per sub-event, is there a limit to those? I mean can you set it up [inaudible] person falls off and is destroyed. Is there upper limit on what you can do with that? >> Arun Babu Nagarajan: No. So for the free edition, I think they have an upper limit of number of total events to be a hundred I think. And for, you know, licensed version you don't have any limits. >>: So it's complicated. >> Arun Babu Nagarajan: Yeah, you go whatever complications you want. >>: But I think with the free version they don't want you to publish games anyways. >> Arun Babu Nagarajan: Sure. You can publish games if you are making it as a free game. You cannot have ads and sell it. Yeah? >>: What software did you use to create your artwork? >> Arun Babu Nagarajan: So I came across this website, 2D game art for developers, and InkScape is the website. InkScape is great because you can do vector graphics so you can scale it to whatever size you want. And the interesting thing to note here is that - So for, you know, these tiles and splash screen and all that, for Windows 8 you have to supply, you know, a variety of versions for these images: one scaled for a hundred and another one for a hundred and eighty and two hundred and something else. So that's very easy if you have a program like InkScape which works with non-[inaudible] formats so that you can scale it and then easily export it, and you're done. >>: [inaudible]? >> Arun Babu Nagarajan: InkScape. Yeah. That's [inaudible]; it's free? >>: Have you ever tried to use Expression...? >> Arun Babu Nagarajan: I'm sorry? >>: Have you ever tried to use Expression Design? >> Arun Babu Nagarajan: Expression [inaudible]? >>: Expression Design? >> Arun Babu Nagarajan: No. >>: Does it export formats [inaudible]? >>: Nothing you can actually send to a graphic artist [inaudible] 3D Photoshop or InkScape [inaudible] any success with it. >>: Yeah, [inaudible]. >> Arun Babu Nagarajan: Yeah? >>: Can you debug the content to? [inaudible]? >> Arun Babu Nagarajan: So because I -- Yeah, so debugging through Construct 2 is not very straight forward I think but I haven't had a problem which was actually worth debugging through Construct 2. But while developing the plugin, I had to obviously debug the generated Java Script to make sure that I'm [inaudible] but not the APN and all that. So I definitely did debug with Visual Studio, yeah. Yeah? >>: Does Construct 2 provide any kind of physics? [inaudible] like physics... >> Arun Babu Nagarajan: Physics? Yeah. So they have a physics behavior. I think I can maybe quickly show a --. So yeah that's a template. You have the physics over there. So it basically uses Box2D. Yeah? >>: So in order to actually change the code, you have to export to Visual Studio. Did you find yourself ever having to do that? Or are the tools they provide so good that you actually write the entire thing in there and just export it in? >> Arun Babu Nagarajan: That's right. They have everything which you need pretty much. And in fact, I mean, because I wrote a plugin you can also write a plugin if you find something lacking. Right? >>: Can it do multi-page projects? Like, you know, I understand that you can do one layout. How do you do multiple [inaudible]? [inaudible] or is it like make them [inaudible]... >> Arun Babu Nagarajan: Yeah, so there is -- so this one, right, this is one layout. This is one layout. So I transition from this one to the next layout by calling a system dot go to layout. So they provide this. Yeah, so you can transition between layouts, and you can have your own [inaudible] on which layout you are. And based on some numbering scheme you can say, "Oh, he's in layout 1-7." And then when I click next, you know, skip a level then I would know that I have to go to 1-8. >>: So they alert on [inaudible]... >> Arun Babu Nagarajan: That's all taken care of. >>: Okay. >> Arun Babu Nagarajan: Yeah? >>: Does you plugin provide for ad support or someway to add ads to your game? >> Arun Babu Nagarajan: Yes. Advertisement support, right? >>: Right. >> Arun Babu Nagarajan: Yeah, so I do have a way to add the advertisements. I kind of detailed it in this -- Let me see if I have a post on it. Yeah, so I have a post on it and this will take you through how to actually add ads to your game. So that's how I did this for this game. Yeah. >> Jeremy Foster: Okay. Let's give Arun a round of applause. [applause]